我对git中受版本控制的大量文件做了一个简单的更改,我希望能够检查没有其他更改正在进入这个大型提交.
这些变化都是形式
- "main()",
+ OOMPH_CURRENT_FUNCTION,
Run Code Online (Sandbox Code Playgroud)
其中"main()"可以是任何函数的名称.我想生成不属于这种形式的所有更改的差异.
git diff的-G和-S选项非常接近 - 它们发现与字符串或正则表达式匹配的更改.
有没有办法做到这一点?
另一个问题描述了如何使用这种方法来否定正则表达式,我认为命令应该是
git diff -G '^((?!OOMPH_CURRENT_FUNCTION).)*$'
Run Code Online (Sandbox Code Playgroud)
但这只是返回错误消息
fatal: invalid log-grep regex: Invalid preceding regular expression
Run Code Online (Sandbox Code Playgroud)
所以我猜git不支持这个正则表达式功能.
我还注意到标准的unix diff有-I选项"忽略其行符合RE的变化".但我找不到用unix diff工具替换git自己的diff的正确方法.
是否可以假设git diff以某种模式开头的行保持不变?
例如,请考虑以下情况:
git diff -U0
Run Code Online (Sandbox Code Playgroud)
输出:
diff --git a/file_a.txt b/file_a.txt
index 26ed843..4071ff8 100644
--- a/file_a.txt
+++ b/file_a.txt
@@ -24 +24 @@
- * unimportant foo
+ * unimportant bar
diff --git a/file_b.txt b/file_b.txt
index c6d051e..4b3cf22 100644
--- a/file_b.txt
+++ b/file_b.txt
@@ -24 +24 @@
- * unimportant foo
+ * unimportant bar
@@ -48,0 +49 @@
+ this is important
@@ -56,0 +58 @@
+ this is also important
Run Code Online (Sandbox Code Playgroud)
以星号(正则表达式模式"^[[:space:]]*\*.*")开头的行并不重要,我想仅从 的输出中过滤包含此类行中的更改的文件git diff。在上面的示例中,输出应file_b.txt …