Git“差异”:`git diff`不考虑提交消息,但SHA-1生成在计算SHA-1时需要提交消息

时间:2013-08-13 13:42:12

标签: git

我有两个git分支b'b"具有完全相同的SHA-1因此内容。我提交b'并提交,而不是mergerebase我将cherry-pick -xb"选项应用于我的b"

我的cherry-pick提交消息有一条说明正在应用SHA-1的行。这是我的两个分支之间的唯一区别。因此,b'b"的{​​{1}}不同。但是,如果我diff两个分支都没有变化。

很容易查找SHA-1并得出结论,分支是相同的而不是diff分支来确定

我想知道为什么git不是“一致”,因为git或许应该排除提交消息,而计算SHA-1git diff应该比较和对比提交消息?

2 个答案:

答案 0 :(得分:3)

git diff是关于实际内容的变化,而不是元数据。考虑从另一个分支中挑选提交的用例。很多时候,您想知道两个分支中是否存在相同的内容,而不是两个分支都具有相同的提交。这就是git diff进入画面的地方。

提交哈希当然是提交,并将考虑元数据。

查看两个分支的差异的实际方法是git diff。如果两个分支的头部具有相同的哈希值,则它们具有相同的内容。但如果他们不这样做,他们不一定有不同的内容。

您也可以查看git log -p命令,了解它是否符合您的目的。

答案 1 :(得分:2)

  

我有两个git分支b'和b"完全相同的SHA-1,因此内容。

如果b'和b"拥有相同的SHA,他们是相同的提交和b'和b"有同样的头。要了解提交到提交中的内容,请尝试:

git cat-file commit HEAD

为您提供提交对象的内容:

tree f8156a51641da281e48960d846857aebc3e784a2
parent 61822c28ea4f8580dda88f3b375aef4e3a4f979b
author Someone <someone@somewhere.com> 1348177711 +0100
committer Someone <someone@somewhere.com> 1348178095 +0100

message

在这种情况下,您可能会认为您可以使用树形哈希来确定内容是否相同。这是不可靠的,就好像已经在树枝上执行了一些更改,树会有所不同,但结果内容是正确的。

为什么提交元数据不包含在差异中?一个很好的理由是差异并不总是在提交时继续运行。它可以将其他形式的内容(如索引与提交)进行比较,因此它的目标是比较内容。