有时候,我想重新添加一些我从存储库中删除的代码。我总是使用类似tig
浏览历史记录的工具来查找删除了某些行的提交。
有没有办法用git查找已删除的行?喜欢的东西git-grep
,但对于提交的内容,而不是提交信息?
如果您记得在删除的行中有一些关键字(例如,变量或函数的名称),请使用镐搜索,如下所示:
git log -Skeyword
或查看增量以及提交消息
git log -p -Skeyword
尽管-S
搜索精确的字符串匹配la fgrep
,但是您可以搜索regex匹配-G
。
请注意,“”-S
或-G
“”的参数之间没有空格。
说明文件:
-S<string>
寻找差异来改变文件中指定字符串(即加/删除)出现的次数。旨在供脚本编写者使用。
当您正在寻找确切的代码块(例如
struct
),并且想知道该块自首次出现以来的历史记录时,此功能非常有用:迭代使用该功能将原图像中的有趣块反馈到-S
,并继续进行,直到获得该块的第一个版本。
-G<regex>
寻找差异,其补丁文本包含匹配的已添加/已删除的行。
为了说明之间的区别
-S<regex> --pickaxe-regex
,并-G<regex>
考虑在同一个文件中的以下DIFF提交:+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
虽然
git log -G"regexec\(regexp"
将显示此提交,但git log -S"regexec\(regexp" --pickaxe-regex
不会(因为该字符串的出现次数未更改)。有关更多信息,请参见gitdiffcore中的镐头条目(转载于下)。
diffcore-pickaxe:用于检测指定字符串的添加/删除
这种转换将文件对的集合限制为以某种方式更改前映像和后映像之间的指定字符串的文件对。
-S<block of text>
和-G<regular expression>
选项用于指定搜索这些字符串的不同方式。
-S<block of text>
检测其前映像和后映像在指定文本块中出现次数不同的文件对。根据定义,它不会检测文件中的移动。另外,当变更集在不影响有趣的字符串的情况下批发文件时,diffcore-rename照常启动,并-S
忽略了文件对(因为该字符串的出现次数在重命名检测到的文件对中没有改变)。与结合使用时--pickaxe-regex
,将文本块视为要匹配的扩展POSIX正则表达式,而不是文字字符串。
-G<regular expression>
(mnemonicgrep
:)检测其文本差异具有与给定正则表达式匹配的添加或删除行的文件对。这意味着它将检测文件中的移动(或重命名检测认为相同的文件)移动,这是噪音。该实现两次运行diff并陷入困境,这可能会非常昂贵。当不使用
-S
或时,仅匹配其各自标准的文件对将保留在输出中。当使用时,即使一个filepair匹配它们各自的标准在一个变更中,整个变更被保持。此行为旨在使在整个变更集的上下文中更轻松地检查变更。-G
--pickaxe-all
--pickaxe-all
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句