首页 > 解决方案 > 通过硬重置回在合并中获得的提交来擦除合并提交?

问题描述

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

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

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

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

等等,什么?

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

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

标签: gitgithubmergecommit

解决方案


如果您的 repo 已merge.ff设置false,或者如果您--no-ff以其他方式指定合并,Git 将记录合并,即使在此处并非绝对必要时也是如此。

你必须

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

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

因此,当您删除git reset --hard合并E的记录时,您完全没有更改内容,而生成的历史正是快进合并所获得的。


推荐阅读