通过硬重置回合并中获得的提交来擦除合并提交?
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 --hard
到 E
时,你删除了合并的记录,根本没有改变内容,结果历史正是 fast-forward 合并的结果找到你了。
合并前我的历史看起来像 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 --hard
到 E
时,你删除了合并的记录,根本没有改变内容,结果历史正是 fast-forward 合并的结果找到你了。