gpt4 book ai didi

git - 为什么 git log --find-object 对于给定的 blob 会获得两个具有不同内容的文件提交?

转载 作者:行者123 更新时间:2023-12-03 08:34:45 25 4
gpt4 key购买 nike

我正在使用git log --find-objectidentify commits通过提供 git 文件 blob(文件内容哈希)。

这通常工作正常,我之前使用 git hash-object 获取文件的 blob .

但是,有时对于文件的给定 blob 哈希,git log --find-object=<blob>返回同一文件的两个提交,其中返回的提交的文件内容肯定不同

获得多个提交,其中相应的文件内容与我期望的相同,但是提交报告的内容不完全相同对我来说似乎很奇怪(这是基于我的理解方式) --find-object 选项 atm)。

这是为什么呢?我必须在哪里详细说明该命令?

最佳答案

正如documentation所述(另请参阅 -S and -G option 来理解它):
使用此选项,如果所述对象的出现次数发生变化,则会提及提交。

所以,如果您选择blobid存储库中某个文件的名称(例如,文件 Readme.md 的 blobid)

git log --find-object=<blobid>将会:

  1. 报告提交 blobid显示为文件 Readme.md (这就是你所期望的),
  2. 报告提交该 Blob 消失的文件 Readme.md ,例如:更改了 Readme.md 内容的提交来自 blobid到别的事情;
  3. 报告提交此 blob 在某些其他路径出现或消失的情况,例如:在某个时刻,文件 doc/Doc.md有完全相同的blobid ;
  4. 报告提交的内容已被重命名的文件,例如:file doc/Doc.md已重命名为Readme.md ,或来自Readme.mddoc/Doc.md

您可以运行:

git ls-tree -r <commit> | grep <blobid>
# check parent commit too :
git ls-tree -r <commit>^ | grep <blobid>

看看哪个<commit>包含该 Blob ,以及位于什么路径。

如果想查看精确路径被什么修改了Readme.md ,您可以将其作为过滤器添加到 git log :

git log --find-object=blobid -- Readme.md

这将消除上述情况 3. 和 4.。
您仍然会看到您查找的内容位于父提交中的提交(上面的情况 2)。

关于git - 为什么 git log --find-object 对于给定的 blob 会获得两个具有不同内容的文件提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64248388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com