Как объединить две ветви с некоторыми похожими коммитами и без общего предка? - PullRequest
1 голос
/ 28 января 2020

У меня есть хранилище с двумя ветвями: master и front_end_dev . Один из моих коллег создал ветку front_end_dev из master , и у них общая история коммитов, но истории разделены, а ветви разделены. Ниже показано:

MASTER            m1 -- m2 -- m3 -- m4 -- m5 -- m6 -- m7 -- m8 -- m9

FRONT_END_DEV     m1 -- m2 -- m3 -- m4 -- m5 -- f1 -- f2 -- f3 -- f4

Например, первые пять коммитов одинаковы в обеих ветвях, но затем истории расходятся. Однако ветви не связаны одним общим предком. Как бы я go либо слил front_end_dev в master и / или перебазировал front_end_dev , чтобы он правильно разветвлялся с последним общим коммитом?

1 Ответ

1 голос
/ 28 января 2020

Из того, что я понимаю, коммит mi в master имеет те же изменения, что и коммит mi в front_end_dev (i = 1, ..., 5), но у них другой ха sh так как вы говорите, истории разные.

rebase

git checkout front_end_dev
git rebase master

Это будет перебазировать front_end_dev на master. Вы бы выстроили все эти коммиты на front_end_dev (m1 - m9 с последующим m1 - m5 - f1 - f4). Поскольку коммиты mi в обеих ветвях имеют одинаковые изменения, эта перебазировка вызовет много конфликтов. После того, как вы разрешите эти болезненные конфликты, вы можете быстро перейти на мастер:

git checkout master
git merge front_end_dev

объединить

git checkout master
git merge front_end_dev

Это самый простой и, возможно, лучший вариант. Вы просто генерируете коммит слияния и разрешаете конфликты.

rebase f1-f4

Если вы действительно уверены, что фиксирует mi (i = 1, .. ., 5) содержат одинаковые изменения в обеих ветках, возможно, вы захотите перебазировать только коммиты f1-f4 на мастер.

git checkout <hash-commit-f1> # checkout to commit f1
git checkout -b branch_with_fi # create a branch from commit f1
git merge frond_end_dev # add commits f2, f3 and f4 to the new branch

Теперь вы можете перебазировать или объединить новую ветку:

git rebase master

или

git checkout master
git merge branch_with_fi
...