Git在重写历史上的差异



我很想知道Git在这种情况下的差异,我在Git文档中找不到

假设在分支A上,我有三个提交
Branch A: Commit 3 <-- Commit 2 <-- Commit 1

Commit 3是最新的分支。

  1. 现在,如果我们重写提交历史,即重置最近的Head~2提交,并将它们压缩成一个,那么分支看起来像

Branch A: Commit 3' <-- Commit 1
Commit 3'包括commit 3和commit 2。

现在如果我运行命令git diff commit3 commit3',它会工作吗?如果是,那么为什么会有不同的变化?

  1. 如果我们删除commit 3,只保留commit 2作为最新的主服务器。然后git diff commit 3 commit 2会显示什么?

注意:这里的commit 3已经被删除了,如果发现diff, git将如何跟踪它?

它会起作用,因为每次提交实际上都是工作存储库当前状态的快照,而不管是什么使该存储库进入这种特定状态。因此,你可以将任何修订与任何其他修订进行比较。

如果你只是简单地重基合并你的提交,你应该没有commit3commit3'之间的区别,因为它们的最终状态是相同的。

这不同于"应用更改",例如"挑选"。在后一种情况下,首先通过比较所选择的提交与其父提交来获得变更集,然后将diff的结果应用于当前工作目录。