为什么“gitls-files-s”和“gitlog”输出不同的SHA哈希?

在同一个文件上使用 'git ls-files -s' 和 'git log' 时,我得到不同的 SHA 哈希值。以 repo https://github.com/preservim/nerdtree 中的文件 lib/nerdtree/nerdtree.vim ,标签 6.10.5 为例。

命令git log lib/nerdtree/nerdtree.vim产生,

commit 593c16add35a5461f189b8189abe219f7bbbd604 (tag: 6.10.5)

但命令git ls-files -s lib/nerdtree/nerdtree.vim产生,

100644 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2 0 lib/nerdtree/nerdtree.vim

如果我尝试检出 'git log' 返回的 SHA,则该命令会成功。如果我尝试检查“git ls-files -s”返回的 SHA,则会产生致命错误:

git checkout 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2 lib/nerdtree/nerdtree.vim

fatal: reference is not a tree: 61a11a96ba44c7b1bf0472b598f2c967b2dce9f2

为什么 'git ls-files -s' 和 'git log' 为同一个文件生成不同的 SHA 哈希?

注意:我四处寻找答案并找到了这个线程:Git - 在 index 中找到单个文件的 SHA1。这个线程解释了为什么 'git hash-object' 和 'git ls-files -s' 的输出之间可能存在差异,但它没有解释 'git ls-files -s' 和 'git 的输出之间的差异日志'。

回答

原因是:

  1. 返回git log的哈希是标识提交的哈希。
  2. 返回的哈希git ls-files -s文件 blob的标识符。

以上是为什么“gitls-files-s”和“gitlog”输出不同的SHA哈希?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>