合并分支更改后,“修改” git合并提交

时间:2019-12-11 16:51:52

标签: git merge squash

假设我已经在git中将源分支合并到目标分支。解决冲突花费了很多时间。同时,源分支发生了很大变化。现在,我必须将源分支的最新状态合并到目标分支中,但是我需要“修改”第一个合并提交,因此我只有一个合并提交,而不是两个。如何将两个合并提交压缩在一起?

如果它们是常规提交,则我将软重置为HEAD〜,然后提交--amend,但是在这种情况下,这将导致merge2具有错误的父项:它不会源自src的最后一次提交科。重定基也不起作用,因为我不知道如何将提交作为合并重定基(即,使其具有两个特定的父级)。我也不想从头开始重做整个合并,因为这将花费很多时间。

有没有办法在git中做到这一点?

2 个答案:

答案 0 :(得分:1)

我想我找到了解决方案。假设该图看起来像第二个图(带有“ merge”和“ merge2”)。然后执行以下操作:

git replace --graft HEAD HEAD^^ HEAD^2

这会将HEAD的父代更改为HEAD ^^和HEAD ^ 2。

合并提交的第一个父级始终是目标分支,第二个父级是源分支(已合并到另一个分支中的分支)。 HEAD ^是HEAD(= merge2)的第一个父级,这是第一个合并提交,因此HEAD ^^是第一个合并提交的第一个父级-这应该是第二个合并提交的新的第一个父级! HEAD ^ 2是merge2的第二个父对象,应保持不变。因此,将HEAD的两个父级更改为HEAD ^^和HEAD ^ 2即可完成工作。

答案 1 :(得分:0)

如果你换个角度思考,会很容易。 假设您的主分支称为“branch-main”,另一个分支称为“branch-dev”。从图 2 中您需要做的是(假设您在 branch-main 上并且您的 HEAD 在合并节点上)。

git reset HEAD^ --hard
git merge branch-dev

就是这样。它会给你一个新的合并节点,忽略前一个,这就是图 3。 ?