git revert合并的坑

场景如下:revert了feature合并到main的提交m1后,重新合并。

这个时候只能将后续未合并过的提交c2’,c3’合并进来,合并过的c1’则不行。

这是因为三方合并(three-way merge)逻辑:

  1. Git在合并两个分支时,会找到 共同祖先(common ancestor)
  2. 然后比对目标分支和当前分支相对于共同祖先的改动;
  3. 如这些改动已经包含在主分支里(即之前合并过了),会判断“无需再次合并”,也就是只能合并一次;
  4. 而 revert 不会抹去这个“曾经合并过”的事实。

如果还是想要c1’的提交,那么必须revert r1的提交也就是重做一次m1。

示意图