gpt4 book ai didi

git - 如何找到包含给定字符串的文件的树的提交 SHA1

转载 作者:太空狗 更新时间:2023-10-29 14:28:41 26 4
gpt4 key购买 nike

情况是这样的:我在我的 git 存储库中丢失了一些工作,这项工作曾经提交过,但现在埋在我的历史中,某个地方可能无法通过'git log --all' 。我唯一能记住的是一些不同的字符串,可以精确定位属于我此时工作的一部分的文件。

我有一个解决方案......但是它很长,你有更好的解决方案吗?

这是我的解决方案:

我已经通过批处理几个命令找到了我的提交 SHA1:

  • 首先在 .git/objects 中找到所有“blob”对象,“git cat”它们(并使用 grep)以找到包含我的文件的 blob 的 SHA1。
  • 然后我必须解析所有“树”对象以找到包含文件 SHA1 的对象……直到没有包含在其他“树”对象中的树对象。
  • 最终解析包含此根树的所有提交。

最佳答案

如果提交可以从某个引用到达,最佳解决方案肯定是镐搜索:git log -Sstring --all .

如果无法访问,那么您是对的,您将不得不进行一些挖掘。如果您认为悬空提交散落在各处,最简单的做法是使用 git fsck --lost-found。找到你悬空的提交。 (它还会打印悬挂的 Blob 。)然后您可以使用 git grep <commit>在每个 SHA1 上,找到您的字符串。

另一方面,如果你认为你有几个候选分支被修剪了,你的目标将在其中一个上,我会使用 git reflog show回顾你的 reflogs,找到它们顶端的提交,并重新创建它们,所以你可以做 git log -Sstring <branches> ^master .

关于git - 如何找到包含给定字符串的文件的树的提交 SHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451232/

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