Подтвердить что ты не робот

Как объединить ветвь разветвленного репо в основную ветвь исходного репо?

В GitHub есть проект с открытым исходным кодом. Его первоначальное репо содержит самую последнюю ветвь мастера. Теперь есть кто-то (а не я), который разветкил это репо, создал ветку развития от ведущей ветки и добавил материал в ветку разработки. Теперь я хотел бы объединить ветвь разработки обратно в главную ветку. К сожалению, главная ветвь разветвленного репо не обновляется. Также обратите внимание, что я не владею двумя соответствующими удаленными репозиториями.

В настоящий момент я клонировал как исходное репо, так и разветвленное репо на свою локальную машину, используя git clone. Как я могу объединить ветвь разработки разветвленного репо в основную ветвь исходного репо на моем локальном компьютере (т.е. На удаленном сервере, который в любом случае невозможен)?

4b9b3361

Ответ 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 (назовите только что созданную ветку, которая содержит как удаленные ветки)