【问题标题】:How to merge two branches with some similar commits and no common ancestor?如何合并具有一些相似提交且没有共同祖先的两个分支?
【发布时间】:2023-03-20 06:50:02
【问题描述】:

我有一个包含两个分支的存储库,ma​​sterfront_end_dev。我的一位同事从 ma​​ster 创建了 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 合并到 ma​​ster 和/或重新设置 front_end_dev 以便它正确地分支最后一次共享提交?

【问题讨论】:

  • 选项 1—打开 MASTER: git merge FRONT_END_DEV 创建一个合并提交,您必须在其中协调冲突(即从 m6m9 的内容未考虑)或选项 2 —FRONT_END_DEV: git rebase MASTERm9 之上重播f1f4,这会生成新的提交(即,如果您希望将f1f4 的提交具体保留在历史中,则不适合)。如果您现在按照 1) for FRONT_END_DEV,它将创建一个快进合并(即没有合并提交,线性历史)。
  • 太棒了,成功了。谢谢!

标签: git merge rebase


【解决方案1】:

据我了解,在master 上提交mi 与在front_end_dev 上提交mi 具有相同的更改(i = 1, ..., 5),但是自从您说之后它们具有不同的哈希值历史是分开的。

变基

git checkout front_end_dev
git rebase master

这会将front_end_dev 重新设置为master。您将在front_end_devm1 - m9 后跟m1 - m5 - f1 - f4)上排列所有这些提交。由于两个分支上的 mi 提交具有相同的更改,因此此 rebase 会产生很多冲突。一旦你解决了这些痛苦的冲突,你就可以在 master 上快进:

git checkout master
git merge front_end_dev

合并

git checkout master
git merge front_end_dev

这是最简单的,也许是最好的选择。您只需生成一个合并提交并解决冲突。

变基 f1-f4

如果您确实确定提交 mi (i = 1, ..., 5) 在两个分支上包含相同的更改,您可能希望仅将提交 f1-f4 重新设置到 master 上。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2019-11-23
    • 2020-04-03
    相关资源
    最近更新 更多