【发布时间】:2013-05-18 17:43:40
【问题描述】:
我在 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),如 here 所述。我进行了还原,因为我们已经在 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 可以帮助我做到这一点,但我不知道如何。
任何想法都会非常有帮助。
【问题讨论】:
-
您的历史在第一张和第二张照片中看起来不同。哪一个?在第一张图片中有适当的合并,在第二张图片中是快进。
-
我想表明错误修复中的历史现在与大师的历史混合在一起。
-
您展示了它在显示为线性(按时间顺序)历史时的外观,而不是它的样子。
标签: git git-merge git-revert