Слияние вилок в GitHub


259

Я раздвоил репозиторий GitHub. Затем я внес некоторые изменения в мою вилку. Тогда исходный репозиторий объединил мои изменения и некоторые другие. Теперь я хочу объединить те изменения, которые мне не хватает. Я попробовал простое нажатие с последующим нажатием, но в результате мои коммиты были повторены. Какой лучший способ сделать это?

Ответы:


352

Вероятно, у вас есть «удаленный» для каждого хранилища. Вы должны вытащить из одного пульта и подтолкнуть к другому.

Если вы изначально клонировали с вашего форка, этот пульт будет называться «origin». Если вы еще не добавили его, вам нужно добавить хранилище от первого лица в качестве другого удаленного:

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
@ Адам, это на странице запроса на извлечение. Таким образом, форкер откроет Запрос на вытягивание, чтобы объединить одну из их ветвей с одной из ваших. Там вы можете нажать кнопку слияния.
Роб Баррека

2
Кнопка перемотки вперед больше не доступна. Для информации я использовал другой URL-адрес git в моей команде: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

Проблема в том, что если у вас уже есть изменения, включенные изменения создадут коммит слияния Полезно в некоторых случаях, но в большинстве случаев немного бессмысленно.
Пабло Олмос де Агилера К.

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