通过硬重置回合并中获得的提交来擦除合并提交?

Erasing a merge commit by hard resetting back to a commit that was gained in the merge?

合并前我的历史看起来像 A -> B -> C

我正在合并的分支看起来像 A -> B -> C -> D -> E,即分支与我的历史相同,但有两个新提交

我只是想要这两个提交,所以我将该分支合并到我的分支中。合并后,我的分支看起来像 A -> B -> C -> D -> E -> F,其中 F 是合并提交。

我不想在我的历史中合并提交 F,所以我硬重置回提交 E...

等等,什么?

我通过硬重置回在合并提交中获得的提交来删除合并提交...?那可能吗?我认为合并提交本身就是应用你从合并中获得的任何新提交的东西,所以如果你撤销合并提交(就像我所做的那样)那么你将失去合并提交所做的一切,即你将失去所有通过合并获得的承诺。

这不是合并提交的工作方式吗?

如果您的存储库 merge.ff 设置 false,或者如果您以其他方式指定 --no-ff 合并,Git 将记录合并,即使在这里,它不是绝对必要的。

你必须

A---B---C-------F    master
         \     /
          D---E

其中 F 内容与 E 内容相同。有时您需要这样做,例如在生产历史记录中,将实际投入生产的内容记录为这样的一系列合并通常很方便,任何了解惯例的人都可以看到 D 从未投入生产,它是系列的一部分。

所以当你 git reset --hardE 时,你删除了合并的记录,根本没有改变内容,结果历史正是 fast-forward 合并的结果找到你了。