我有一个带有两个分支的存储库,分别是master和front_end_dev。我的一位同事从master创建了front_end_dev分支,他们共享提交历史,但是历史是分开的,分支是分开的。如下图所示:
MASTER m1 -- m2 -- m3 -- m4 -- m5 -- m6 -- m7 -- m8 -- m9
FRONT_END_DEV m1 -- m2 -- m3 -- m4 -- m5 -- f1 -- f2 -- f3 -- f4
例如,前两个分支的前五个提交相同,但是历史不同。但是,分支不是由单个公共祖先连接的。我该如何将front_end_dev合并到master和/或重新部署front_end_dev以便正确分支上一次共享的提交?
据我了解,mi
上的提交master
与mi
上的提交front_end_dev
具有相同的更改(i = 1,...,5),但是它们具有不同的哈希值,因为您说了历史是分开的。
rebase
git checkout front_end_dev
git rebase master
这将使front_end_dev
基于master
。您将在front_end_dev
(m1 - m9
后跟m1 - m5 - f1 - f4
)上排列所有这些提交。由于两个分支上的mi
提交都具有相同的更改,因此此基准将产生很多冲突。解决了这些痛苦的冲突之后,您就可以在master上进行快速转发:
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