我在 Git 中有一个我无法解决的问题。我已经搜索了类似的案例,但我无法找到适合我情况的好的解决方案。
我基本上有 2 个分支,master 和 bugfix。错误修复是在我们完成发布时从 master 派生的。每次我们在 bugfix 中修复某些内容并进行 bugfix 发布时,我们都需要将其合并到 master 中。Master 包含新功能(当然不应该合并到错误修复中)。碰巧有人错误地将master与bugfix合并。
This is what happened:
master: x1---x2
\
bugfix: y1--y2--M
where M is the merge between bugfix and master
一个解决方案是恢复我使用“git revert -m 1 M”(M 是来自合并的 SHA)所做的合并,如此处所述。我做了一个还原,因为我们已经在 bugfix 分支中进行了其他我们不想丢失的更改,这对于 bugfix 分支来说效果很好。
Current state:
master: x1--x2------------x---x
bugfix: y1--x1--y2--x2--M--y--y--R1
where R1 is the revert of M
当我们需要在 master 中合并 bugfix 分支时,问题就会出现。如我发布的链接中所述,revert 修复了代码更改但不修复历史记录,这意味着当我在 master 中合并 bugfix 时,revert 将生效并从 master(x1 和 x2)中删除更改。我能做的是在我将它合并到master之前恢复bugfix中的revert。
Solution:
master: x1--x2------------x---x--------M
/
bugfix: y1--x1--y2--x2--M--y--y--R1--R2
where R2 is the revert of R1
这可行,但不是最终解决方案,因为每次我们进行合并时,我们都需要执行“revert of the revert”。几天来,我一直在寻找永久解决方案,似乎唯一的选择是从错误修复分支的历史记录中删除主提交(x1 和 x2)。但是这里使用 x1 和 x2 只是作为示例,实际上我们有更多的提交,并且剖析 bugfix 分支的历史非常困难且容易出错。我确信 Git 可以帮助我做到这一点,但我不知道怎么做。
任何想法都会非常有帮助。