如何查看两个相同修订版本之间的区别?

时间:2018-01-10 10:49:34

标签: git version-control git-diff git-hash

TL; DR

不同的祖先,空的差异,不同的程序。如何看待差异是什么?

我认为问题的答案应该是:如果它们相同,则 没有差异。

我现在正在发生的事情是,我有两个不同的修订,似乎有一个空洞的差异。

> 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
|
.

2 个答案:

答案 0 :(得分:3)

  

是否仅仅根据内容计算哈希值?那为什么diff没有检测到任何东西?

的哈希值仅取决于其内容。 commit 包含对树的引用,但也包含提交消息,日期,作者,对其父提交的引用等,其哈希值是所有这些的哈希值。信息。两个提交可以反映相同的文件状态,并且它们之间没有差异,但具有不同的哈希值。事实上,他们必须这样做。

答案 1 :(得分:1)

  

我认为问题的答案应该是:如果它们相同,则没有差异。

2次提交的内容是相同的,这意味着幕后的git将使用相同的SHA-1作为树(指针),但正如上面解释的hobbs一样,提交SHA-1是提交内容的校验和

提交包含blob树和更多信息 提交对象本身只是元数据的校验和(SHA-1),包括给定提交树的树对象。

提交包含的信息多于下面图像中包含的信息,如时间戳等等。

为了理解提交中存储的内容,我们需要了解什么是提交。提交是附加到内容的元数据。

每次向git添加文件时,都会开始通过内容的SHA-1跟踪和命名它们。当您提交更改时,git会创建一个对象,该对象指向此修订中提交的文件的树。

如果未进行任何更改,则树将指向与上一次提交相同的树。如果有变化,将会有一棵新树。

enter image description here

如果您想查看提交的内容,请使用git show

 git show <SHA-1>

例如,这是git show的样子:

enter image description here