3

我有两个 git 分支b',它们b"的内容完全相同SHA-1。我提交b'并提交,而不是merge或者rebase我使用该单一提交的选项cherry-pick应用到我的.-xb"

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

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

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

4

2 回答 2

3

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

提交哈希当然是用于提交,并且会考虑元数据。

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

您还可以查看git log -p命令以查看它是否适合您的目的。

于 2013-08-15T16:30:42.977 回答
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

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

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

于 2013-08-19T20:34:16.713 回答