Слияние вилок в GitHub - PullRequest
253 голосов
/ 14 июля 2009

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

Ответы [ 2 ]

344 голосов
/ 14 июля 2009

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

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

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

После того, как все это настроено, вы действительно сможете

git pull firstguy master
git push origin

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

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

71 голосов
/ 27 января 2012

Так что принятый ответ выше не сработал для меня идеально. А именно, казалось, что он потерял связь с первоначальным автором 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...