【发布时间】:2013-04-08 12:06:20
【问题描述】:
我对 git 中受版本控制的大量文件进行了一次简单的更改,我希望能够检查是否没有其他更改滑入这个大型提交中。
变化都是形式
- "main()",
+ OOMPH_CURRENT_FUNCTION,
其中“main()”可以是任何函数的名称。我想生成所有不属于这种形式的更改的差异。
git diff 的 -G 和 -S 选项非常接近——它们发现确实匹配字符串或正则表达式的更改。
有什么好办法吗?
目前的尝试
另一个question 描述了如何否定正则表达式,使用这种方法我认为命令应该是
git diff -G '^((?!OOMPH_CURRENT_FUNCTION).)*$'
但这只是返回错误消息
fatal: invalid log-grep regex: Invalid preceding regular expression
所以我猜 git 不支持这个正则表达式功能。
我还注意到标准的 unix diff 具有 -I 选项来“忽略行都匹配 RE 的更改”。但是我找不到用unix diff工具替换git自己的diff的正确方法。
【问题讨论】:
-
如果您能找到所有匹配的更改,请将它们存储在一个文件中并
git diff | fgrep -vxf file -
也许您也可以将 git diff 的结果存储在一个文件中,并使用更好的正则表达式工具。
-
@tripleee 这行得通,谢谢!这不是一个理想的解决方案,但如果您将其重写为答案,我会接受。
-
@Loamhoof 我想到了这一点,但我认为您需要正确解析 diff 输出才能删除整个更改(而不仅仅是删除单行)。
-
这完全值得一个功能请求......