Как объединить ветвь разветвленного репо в основную ветвь исходного репо?
В GitHub есть проект с открытым исходным кодом. Его первоначальное репо содержит самую последнюю ветвь мастера. Теперь есть кто-то (а не я), который разветкил это репо, создал ветку развития от ведущей ветки и добавил материал в ветку разработки. Теперь я хотел бы объединить ветвь разработки обратно в главную ветку. К сожалению, главная ветвь разветвленного репо не обновляется. Также обратите внимание, что я не владею двумя соответствующими удаленными репозиториями.
В настоящий момент я клонировал как исходное репо, так и разветвленное репо на свою локальную машину, используя git clone
. Как я могу объединить ветвь разработки разветвленного репо в основную ветвь исходного репо на моем локальном компьютере (т.е. На удаленном сервере, который в любом случае невозможен)?
Ответы
Ответ 1
При использовании GitHub вы можете сделать это, используя Запрос Pull. Просто переместите ветвь разработки в разветвленный удаленный репозиторий и создайте запрос на перенос, как описано в связанной статье. Затем владелец исходного репозитория может добавить ваш репозиторий в качестве нового удаленного репозитория, получить ваши изменения и объединить ветвь разработки обратно в главную ветвь.
Как правило, не обязательно, чтобы ваша главная ветка была полностью обновлена, хотя она чрезвычайно полезна, особенно при слиянии ветки разработки.
Во-первых, вы должны принести ветвь master
в обновленном репозитории:
$ git remote add upstream ssh://path/to/original/repo
$ git checkout master
$ git fetch upstream # Instead of "fetch" & "merge", "pull" would also work
$ git merge upstream/master
Затем либо rebase
, либо merge
ветвь развития в ведущую ветвь:
$ git checkout development
$ git rebase master # OR "git merge master"
При необходимости разрешите любые конфликты. При слиянии используйте git commit
, чтобы завершить слияние, при перезагрузке используйте git commit && git rebase --continue
.
Теперь вы должны иметь возможность git push
указать источник разветвленного репозитория и создать запрос на перенос. Кроме того, если вы уполномочены делать это, вы также можете напрямую нажать на исходный репозиторий из своей вилки.
Ответ 2
Похоже, вы уже клонировали оба репозитория. Я собираюсь предположить, что у вас есть их в каталогах clone1
и clone2
.
Вам нужно получить все изменения в одном репозитории, прежде чем вы сможете выполнить слияние. Таким образом, мы собираемся вытащить один из ваших клонов в другой. Если бы вы делали это с нуля, вы просто клонировали бы один репозиторий, а затем извлекали другого, вместо того, чтобы клонировать оба.
-
cd clone1
-
git checkout master
-
git remote add clone2 ../clone2
(поместите оба пульта в одно репо). Если бы вы не клонировали оба репозитория, вам не нужно было это делать - вы просто сделали бы git remote add otherthing https://<github URI>
-
git fetch
(выбор из clone2
изменяется на clone1
). Теперь у вас есть один репозиторий со всем.
-
git checkout origin/master
Или вы можете проверить местную ветку. Ваше предпочтение. Помните, что origin
здесь ссылается на источник для clone1
.
-
git merge clone2/development
При необходимости разрешите конфликты на этом этапе. Зафиксируйте результат.
-
git checkout -b my-ongoing-development
(назовите только что созданную ветку, которая содержит как удаленные ветки)