git:两个非常相似的提交之间的区别?

我需要知道为什么两个提交是不同的.我有两个提交,e2383d和2c44ab,显然,因为它们有不同的哈希,不同.

首先,我知道git diff,目前,我正在尝试git diff e2383d 2c44ab.它成功返回,没有输出.这两个提交有:

>相同的提交消息
>同一作者
>相同的提交日期(编辑:抱歉,只是日期,请参阅下面的答案)
>同一个父母
>据我所知,内容相同.

基本上,我的树看起来像这样:

* ← stuff based on that commit
| * ← e2383d
* | ← 2c44ab
|/
* ← the common parent

我即将消除e2383d,但在此之前,我想确保那里没有重要的东西.然而,我对git的理解是,如果两个“提交”是相同的,它们将具有相同的哈希值,因此除非两者之间存在差异,否则我的情况将不存在.

我试过的另一件事:

% diff <(git show 2c44ab) <(git show e2383d)  
1c1
< commit 2c44ab...
---
> commit e2383d...

忘记提交有> 1个日期.以下命令显示(对我来说)我的两个提交之间的区别:

% diff <(git show --pretty=fuller 2c44ab) <(git show --pretty=fuller e2383d)
1c1
< commit 2c44ab96bde429c9f345d8a12dfcf2278faa9333
---
> commit e2383d3164589bb3a8a679c9cb6bbe93ea41e2ee
5c5
< CommitDate: Wed Nov 23 17:06:40 2011 -0800
---
> CommitDate: Mon Nov 28 11:41:26 2011 -0800

星期一的提交日期是我进行改变的时间.现在,为什么git存储这个 – 似乎打败了“这些是同样的提交,我会折叠它们”我预期的行为.

最佳答案 两个提交可能具有相同的树但具有不同的元数据.每当修改,重新定位或挑选提交时,将更新提交日期并写入新的提交.

如果git说提交A和B之间的差异是空的,但你仍然不确定,你可以自己验证它们是否指向同一棵树

git rev-parse A^{tree} B^{tree}

它将列出其树对象的名称,或者使用

git cat-file -p A
git cat-file -p B

这将向您显示原始提交对象.

点赞