Злиття між вилами в GitHub


259

Я відправив у сховище GitHub. Потім я підштовхнув кілька змін до вилки. Тоді оригінальний сховище об'єднав мої зміни та деякі інші. Тепер я хочу об'єднати ті зміни, які мені не вистачає. Я спробував просте тягнення з подальшим натисканням, але це дало мої зобов’язання у двох примірниках. Який найкращий спосіб це зробити?

Відповіді:


352

Напевно у вас є "дистанційний" для кожного сховища. Вам потрібно витягнути з одного пульта і підштовхнути до іншого.

Якщо ви спочатку клонували з вилки, цей пульт буде називатися "походженням". Якщо ви його ще не додали, вам потрібно буде додати сховище першої особи як інший пульт:

git remote add firstrepo git://github.com/first/repo.git

Після того, як це все налаштовано, ви дійсно повинні мати можливість

git pull firstrepo master
git push origin

Пам'ятайте, git pullце не що інше, як макрос, який є, git fetchі git mergeв такому порядку. Вам просто потрібно отримати список комітетів із сховища першої особи, а потім об'єднати їх гілку у ваше дерево. Об’єднання повинно правильно виконати ваші зобов’язання на обох гілках.

GitHub, у всій своїй постійній приголомшливості, звичайно, дає вам ярлик. На вилці сховища є кнопка "перемотка вперед", яку ви можете використати, щоб підняти свою вилку, якщо ви повністю злиті з іншою стороною.


1
Чи є спосіб це зробити повністю за допомогою віддалених операцій? Якщо я правильно розумію, за допомогою цього методу ви завантажите всі зміни в локальний сховище, а потім завантажте їх (натисніть) назад у вилку на github. Я вважаю за краще просто якось перетягнути всі зміни прямо у вилку на github.
Кен Лю

1
Ні. Git це не підтримує. На щастя, Github зараз має кнопку злиття у веб-інтерфейсі.
cweiske

13
@cweiske - де ця кнопка Злиття? Я переглянув усі сторінки адміністратора та головні сторінки, але не можу його знайти :(.
Адам,

2
@Adam, це на сторінці "Запити запит". Таким чином, форкери відкрили б Запит на вилучення одного з своїх відділень до одного з ваших. Там ви можете натиснути кнопку злиття.
Роб Баррека

2
Здається, кнопка Перемотування вперед вже не доступна. Для інформації я використав ще одну git URL у своїй команді:git remote add snaury git@github.com:snaury/script-runner
olibre

72

Тож прийнята відповідь вище не працювала для мене ідеально. А саме, здавалося, він втратив посилання на оригінального автора github, коли він працював, а потім вже не працював. Я думаю, що проблема полягала в тому, що відповідь залишила / між віддаленою назвою та гілкою. Таким чином, ви отримаєте гілку з назвою "master" з віддаленого пункту, але тоді не зможете нічого з цим зробити. Не дуже впевнений, чому.

Ось як рекомендує github з їх сайту .

Після того, як ви клонували своє роздрібнене репо, вам потрібно додати віддалений вказівник до оригіналу, як сказано у попередній відповіді. Вони люблять називати це вище, але це не має значення.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Тоді ви забираєте

git fetch upstream

і ви побачите версії, доступні для злиття

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Тоді вам просто потрібно вибрати гілку, в яку ви хочете об'єднатись. Зверніть увагу, це не локальні гілки, вони зберігаються під дистанційним управлінням. Але якщо у вас немає локальної гілки під назвою upstream / master (що дозволено), вам слід добре об'єднатись із рядком нижче:

git merge upstream/master

Крім того, ви можете скоротити вилучення / злиття (як мінімум після початкового вибору) за допомогою цього рядка:

git pull upstream/master

Проблема полягає в тому, що якщо у вас вже є зміни, внесені вами зміни створить об'єднання об'єднань. Корисно в деяких випадках, але в більшості випадків трохи безглуздо.
Пабло Олмос де Агілера C.

1
У такому випадку використовувати git rebaseце було б набагато краще, і залиште ці потворні порожні злиття
Fruch,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.