Я раздвоил репозиторий GitHub. Затем я внес некоторые изменения в мою вилку. Тогда исходный репозиторий объединил мои изменения и некоторые другие. Теперь я хочу объединить те изменения, которые мне не хватает. Я попробовал простое нажатие с последующим нажатием, но в результате мои коммиты были повторены. Какой лучший способ сделать это?
Вероятно, у вас есть «удаленный» для каждого хранилища. Вы должны вытащить из одного пульта и подтолкнуть к другому.
Если вы изначально клонировали с вашего форка, этот пульт будет называться «origin». Если вы еще не добавили его, вам нужно добавить хранилище от первого лица в качестве другого удаленного:
После того, как все это настроено, вы действительно сможете
git pull firstrepo master
git push origin
Помните, git pullэто не что иное, как макрос, который делает git fetchи git mergeв этом порядке. Вам просто нужно получить список коммитов из хранилища первого человека, а затем объединить их ветку с вашим деревом. Слияние должно делать правильно с вашими коммитами в обеих ветках.
GitHub, во всей его вечной удивительности, дает вам быстрый доступ, конечно. На вилке репозитория есть кнопка «ускоренная перемотка вперед», которую вы можете использовать, чтобы подцепить вилку, если вы полностью слились с другой стороной.
Есть ли способ сделать это полностью с помощью удаленных операций? Если я правильно понимаю, с помощью этого метода вы загрузите все изменения в локальный репозиторий, а затем загрузите (переместите) их все обратно на развилку на 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 с удаленного компьютера, но не сможет ничего с этим сделать. Не совсем уверен, почему.
После того, как вы клонировали свой разветвленный репо, вам нужно добавить удаленный указатель на оригинал, как и в предыдущем ответе. Им нравится называть это вверх по течению, но это не имеет значения.
Тогда вам просто нужно выбрать ветку, в которую вы хотите объединиться. Имейте в виду, что это не локальные ветки, они хранятся под удаленными устройствами. Но при условии, что у вас нет локальной ветки под названием upstream / master (что разрешено), вы должны хорошо слиться со строкой ниже:
git merge upstream/master
В качестве альтернативы вы можете сократить выборку / слияние (по крайней мере, после начальной выборки) с помощью этой строки:
Проблема в том, что если у вас уже есть изменения, включенные изменения создадут коммит слияния Полезно в некоторых случаях, но в большинстве случаев немного бессмысленно.
Пабло Олмос де Агилера К.
1
В этом случае использование git rebaseбудет работать намного лучше, и пропустить эти ужасные пустые коммиты слияния
git remote add snaury git@github.com:snaury/script-runner
Таким образом, принятый ответ выше не работал для меня идеально. А именно, казалось, что он потерял связь с первоначальным автором github, когда он работал, а затем, похоже, больше не работал после этого. Я думаю, что проблема заключалась в том, что ответ не учитывал / между удаленным именем и веткой. Таким образом, он будет получать ветку с именем master с удаленного компьютера, но не сможет ничего с этим сделать. Не совсем уверен, почему.
Вот как Github рекомендует с их сайта .
После того, как вы клонировали свой разветвленный репо, вам нужно добавить удаленный указатель на оригинал, как и в предыдущем ответе. Им нравится называть это вверх по течению, но это не имеет значения.
Тогда вы получите
и вы увидите версии, доступные для слияния
Тогда вам просто нужно выбрать ветку, в которую вы хотите объединиться. Имейте в виду, что это не локальные ветки, они хранятся под удаленными устройствами. Но при условии, что у вас нет локальной ветки под названием upstream / master (что разрешено), вы должны хорошо слиться со строкой ниже:
В качестве альтернативы вы можете сократить выборку / слияние (по крайней мере, после начальной выборки) с помощью этой строки:
источник
git rebase
будет работать намного лучше, и пропустить эти ужасные пустые коммиты слияния