【发布时间】:2019-11-22 13:15:20
【问题描述】:
我在合并之前的历史看起来像 A -> B -> C
我正在合并的分支看起来像A -> B -> C -> D -> E,即分支与我的历史相同,但有两个新提交
我只是想要这两个提交,所以我将该分支合并到我的。合并后,我的分支看起来像A -> B -> C -> D -> E -> F,其中 F 是合并提交。
我不想在我的历史记录中合并提交 F,所以我硬重置回提交 E...
等等,什么?
我通过硬重置回在合并提交中获得的提交删除了合并提交...?那可能吗?我认为合并提交本身就是应用您从合并中获得的任何新提交的东西,所以如果您撤消合并提交(就像我所做的那样),那么您将失去合并提交所做的一切,即您将失去所有通过合并获得的提交。
这不是合并提交的工作方式吗?
【问题讨论】:
-
为什么你会丢失所有的提交?如果没有合并提交,它们仍然存在。
-
考虑使用带有图形选项的 git log,你会发现历史不是线性的。
-
您没有获得 E 提交作为合并的一部分。该提交已经存在。你所做的基本上是一种复杂的方式来重现
git merge BRANCH --ff会做的事情。 -
@LasseVågsætherKarlsen 嗯,问题是这些是不同叉子上的两个分支(当我合并时,我必须选择“跨叉子合并”)。到那时你的答案还是一样吗?
-
分叉只是克隆。 “跨叉合并”只是意味着“根据需要将提交从克隆 A 复制到克隆 B,然后合并”。因此,这与它们都在单个存储库中完全相同,因为将提交从克隆 A 复制到克隆 B 使克隆足够相似,因此所有操作现在都发生在克隆 B 中,就好像它都发生在克隆 B 中一样沿着。也就是说,无论它在哪个 repository 中,都会保留 commit 的标识。