我有两个git分支b'
和b"
具有完全相同的SHA-1
因此内容。我提交b'
并提交,而不是merge
或rebase
我将cherry-pick
-x
个b"
选项应用于我的b"
。
我的cherry-pick
提交消息有一条说明正在应用SHA-1
的行。这是我的两个分支之间的唯一区别。因此,b'
和b"
的{{1}}不同。但是,如果我diff
两个分支都没有变化。
很容易查找SHA-1
并得出结论,分支是相同的而不是diff
分支来确定
我想知道为什么git
不是“一致”,因为git
或许应该排除提交消息,而计算SHA-1
或git diff
应该比较和对比提交消息?
答案 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
在这种情况下,您可能会认为您可以使用树形哈希来确定内容是否相同。这是不可靠的,就好像已经在树枝上执行了一些更改,树会有所不同,但结果内容是正确的。
为什么提交元数据不包含在差异中?一个很好的理由是差异并不总是在提交时继续运行。它可以将其他形式的内容(如索引与提交)进行比较,因此它的目标是比较内容。