不同的祖先,空的差异,不同的程序。如何看待差异是什么?
我认为问题的答案应该是:如果它们相同,则 没有差异。
我现在正在发生的事情是,我有两个不同的修订,似乎有一个空洞的差异。
> git diff --quiet a1e4 5010; echo $?
> 0
它们具有不同的提交哈希值,它们包含的程序行为不同,但diff
为空。这怎么可能?
是否有更强大的diff
我不知道这会显示出更深层次的差异?
单独根据内容计算的哈希值是不是?那么为什么diff
没有检测到任何东西?
这是图
* 551d4dc very merge
|\
| |
| * a1e4b09 wow!
| |\
| | |
| | * a337e3c so uninteresting
| | |\
| | | |
| * | | a9f878a many unimportant
| |/ /
| | |
| * | 6d08e83 such irrelevance
| | |
* | | 5010427 wow!
| |/
|/|
| |
* | 74ac627 many father
|/
|
* f0aa6af such grandpa
|
.
答案 0 :(得分:3)
是否仅仅根据内容计算哈希值?那为什么diff没有检测到任何东西?
树的哈希值仅取决于其内容。 commit 包含对树的引用,但也包含提交消息,日期,作者,对其父提交的引用等,其哈希值是所有这些的哈希值。信息。两个提交可以反映相同的文件状态,并且它们之间没有差异,但具有不同的哈希值。事实上,他们必须这样做。
答案 1 :(得分:1)
我认为问题的答案应该是:如果它们相同,则没有差异。
2次提交的内容是相同的,这意味着幕后的git将使用相同的SHA-1作为树(指针),但正如上面解释的hobbs一样,提交SHA-1是提交内容的校验和。
提交包含blob树和更多信息 提交对象本身只是元数据的校验和(SHA-1),包括给定提交树的树对象。
提交包含的信息多于下面图像中包含的信息,如时间戳等等。
为了理解提交中存储的内容,我们需要了解什么是提交。提交是附加到内容的元数据。
每次向git添加文件时,都会开始通过内容的SHA-1跟踪和命名它们。当您提交更改时,git会创建一个树对象,该对象指向此修订中提交的文件的树。
如果未进行任何更改,则树将指向与上一次提交相同的树。如果有变化,将会有一棵新树。
如果您想查看提交的内容,请使用git show
git show <SHA-1>
例如,这是git show的样子: