Git 历史记录 - 通过关键字查找丢失的行

发布于 2024-09-01 07:11:33 字数 72 浏览 2 评论 0 原文

我的 Git 存储库中的某处有一行包含单词“Foo”的单词,之前有数百次提交。

有什么办法可以找到它上次的修订号吗?

I had somewhere in my Git repository a line containing the word "Foo" a couple of hundreds of commits before.

If there is any way to find its revision number where it was the last time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

握住你手 2024-09-08 07:11:33

这可以通过 pickaxe (-S) 选项来解决"noreferrer">gitlog

 git log -SFoo -- path_containing_change

(您甚至可以添加时间范围:--since=2009.1.1 --until=2010.1.1

-S<string>

查找引入或删除 实例的差异。
请注意,这与仅出现在 diff 输出中的字符串不同;有关更多信息,请参阅 gitdiffcore(7) 中的镐条目详细信息。

diffcore-pickaxe

此转换用于查找表示触及指定字符串的更改的文件对。
当使用 diffcore-pickaxe 时,它会检查是否存在“原始”端具有指定字符串而“结果”端没有指定字符串的文件对。
这样的文件对代表“此变更集中出现的字符串”。
它还检查丢失指定字符串的相反情况。


2014 年更新:

从那时起,您可以执行(来自 nilbus答案):

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

这些日志命令列出添加或删除给定搜索字符串/正则表达式的提交,(通常)首先是最近的。
-p (--patch) 选项会导致在添加或删除模式的位置显示相关差异,以便您可以在上下文中查看它。

找到添加您要查找的文本的相关提交(例如8beeff00d)后,找到包含该提交的分支:

git branch -a --contains 8beeff00d

我在“如何列出包含给定提交的分支?")

That may be addressed by the pickaxe (-S) option of gitlog

 git log -SFoo -- path_containing_change

(you can even add a time range: --since=2009.1.1 --until=2010.1.1)

-S<string>

Look for differences that introduce or remove an instance of <string>.
Note that this is different than the string simply appearing in diff output; see the pickaxe entry in gitdiffcore(7) for more details.

diffcore-pickaxe

This transformation is used to find filepairs that represent changes that touch a specified string.
When diffcore-pickaxe is in use, it checks if there are filepairs whose "original" side has the specified string and whose "result" side does not.
Such a filepair represents "the string appeared in this changeset".
It also checks for the opposite case that loses the specified string.


Update 2014:

Since then, you can do (from nilbus's answer):

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

These log commands list commits that add or remove the given search string/regex, (generally) more recent first.
The -p (--patch) option causes the relevant diff to be shown where the pattern was added or removed, so you can see it in context.

Having found a relevant commit that adds the text you were looking for (eg. 8beeff00d), find the branches that contain the commit:

git branch -a --contains 8beeff00d

(I reference that last command in "How to list branches that contain a given commit?")

月光色 2024-09-08 07:11:33

最坏的情况,使用 git bisectgrep

Worst case scenario, use git bisect and grep?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文