我有一个 git 存储库,如下所示:
A1 - B1 - C1 - D1 - E1
\
\ C2 - D2 - F2
C1
和C2
中的文件更改是相同的。如果我运行 git diff C1 C2
那么我会得到一个空结果。同样,D1
和 D2
中的文件更改是相同的。
C1
和C2
的提交消息不同,D1
和D2
的提交消息也不同。
C1
和C2
的哈希值不同。同样,D1
和D2
的哈希值是不同的。
E1
和F2
的变化完全不同。
我想要一个看起来像这样的存储库:
A1 - B1 - C1 - D1 - E1
\
\ F2
我已经尝试过
git rebase
和 git rebase --onto
,这只会保留提交 C2
和 D2
。
这是一个虚构的例子。这里有 2 个提交具有相同的更改。实际上,在代码分歧之前,可能有几十或几百个提交具有相同的更改,并且没有简单的方法可以在不详细检查整个历史记录的情况下确定有多少个提交。
这是正常现象。 git 哈希不仅由它的“内容”(或您所说的“更改”)决定,还由它的出身决定,这意味着它在拓扑中的位置。两个不同的提交始终具有不同的哈希值。别担心,开心就好。
你可以通过说来完成你所描述的变基
git rebase --onto D1 D2 F2
但我真的不明白你认为这会给你带来什么。它不会也不应该神奇地删除 C2 和 D2; Git 中的提交永远不会被删除,除非它们未被引用(即使如此,也需要几周时间才能清理掉)。然后会有两次 F2 提交,所以你的(假)麻烦会加倍。