【问题标题】:Is there a simple way to search through all the code of a git repo through all previous commits?有没有一种简单的方法可以通过所有以前的提交来搜索 git repo 的所有代码?
【发布时间】:2021-10-01 09:01:17
【问题描述】:

我有一个私人 git 存储库,其中有一个关键字,例如 abcde,我之前在其中一个文件中写下了这些文件,这些文件今天可能仍然存在,也可能不存在。有没有一种简单的方法可以在所有以前提交的所有文件中搜索我的关键字abcde

我想我需要编写一个脚本来搜索每个当前文件,但如果它不存在,只需启动 git reset --hard previousCommit 直到它到达第一次提交。

【问题讨论】:

标签: git github search git-commit


【解决方案1】:

你可能正在寻找

git log -G mykeyword 

使用单个 git log 命令,您可以搜索引入任何给定文本的提交。

【讨论】:

  • 我刚试过这个,它给了我大约 2500 次提交中的 3 次提交,其中 2/3 的提交确实有 mykeyword。它似乎不像我需要的那样工作,因为我知道mykeyword 存在于约 2500 次提交中的 3 次以上,但感谢您提供的信息。
  • 啊,不,你不需要知道它存在于哪里,只需要知道存在改变的端点。请阅读 git log 上的文档。
  • @Wang-Zhao-LiuQ 你可能得到了一个额外的提交,因为这个命令还包括 remove 文本的提交。如果没有看到确切的提交日志,我无法确定您所看到的。但很可能就是这样。
【解决方案2】:

您将不得不将两行代码迭代 N 次:
(例如,如果您有 N 次提交)

for VARIABLE in 1 .. N
do
  git checkout HEAD^
  grep keyword *
done

因此,在您的情况下,您可以将以下代码复制并粘贴到 git bash 中:

for VARIABLE in 1 .. 2500
do
  git checkout HEAD^
  grep abcde *
done

当下一次提交不再提供您正在寻找的内容时,迭代停止。
完成此操作后,您终于可以看到包含您要查找的单词的最旧提交的 SHA 标识符是什么。然后可能应用“reset --hard”

希望我对您有所帮助。 ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2022-01-15
    • 2023-03-06
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多