2009-07-14 2 views
241

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

+0

Какие команды вы использовали, чтобы вытащить из восходящего репо и нажать на свою вилку? Что вы подразумеваете под своими обязательствами, были «дублированы»? Характер проблемы неясен и нуждается в дополнительных деталях. – 2013-07-13 22:12:30

ответ

326

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

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

git remote add firstguy git://github.com/firstguy/repo.git 

После этого все готово, вы действительно должны быть в состоянии

git pull firstguy master 
git push origin 

Запомнить , git pull - не более чем макрос, который делает git fetch и git merge, в указанном порядке. Вам просто нужно получить список коммитов из репозитория первого парня, а затем объединить его ветку в свое дерево. Слияние должно делать правильные вещи с вашими фиксациями на обеих ветвях.

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

+1

Есть ли способ сделать это полностью с удаленными операциями?Если я правильно понял, с помощью этого метода вы загрузите все изменения в локальный репозиторий, а затем загрузите их (все) обратно в вилку на github. Я бы предпочел как-то потянуть все изменения прямо в вилку на github. –

+1

№ Git не поддерживает это. К счастью, Github теперь имеет кнопку слияния в веб-интерфейсе. – cweiske

+13

@cweiske - где эта кнопка слияния? Я просмотрел все страницы администратора и основные страницы, но не могу найти его :( – Adam

67

Так что принятый ответ выше не работал для меня отлично. А именно, он, казалось, потерял связь с оригинальным автором github, когда он работал, а затем, похоже, больше не работал после этого. Я думаю, что проблема заключалась в том, что ответ оставил/между удаленным именем и ветвью. Таким образом, он получит ветку, называемую мастером, с удаленного, но затем не сможет ничего с ней сделать. Не совсем уверен, почему.

Вот как GitHub рекомендует с их сайта: http://help.github.com/fork-a-repo/

После того, как вы клонировали свой раздвоенный репозиторий, вам необходимо добавить удаленный указывая к оригиналу, как предыдущий ответ сказал. Они любят называть это вверх по течению, но это не имеет значения.

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 

Тогда вам просто нужно выбрать филиал, который вы хотите объединить в. Имейте в виду это не локальные ветви, они хранятся под пультами. Но если вы не имеете местное отделение под названием вверх/мастер (допускается), вы должны быть в порядке слияния с линией ниже:

git merge upstream/master 

В качестве альтернативы вы можете накоротко выборки/слияния (после первоначальной выборки в наименее) с этой строкой:

git pull upstream/master 
+0

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

+1

В этом случае используйте 'git rebase', это будет работать намного лучше, и оставьте эти уродливые пустые слияния – Fruch

Смежные вопросы