在git version 2.17.1 上,没有内置标志来实现此目的。
这是一个从统一差异中过滤掉文件名和行号的示例命令:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
例如统一的diff:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
将导致:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
在常见的grep匹配结果中匹配命令的输出:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
-
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? ):匹配来自diff --cc <filename> 的文件名或匹配来自@@@ <from-file-range> <from-file-range> <to-file-range> 的行号或匹配@@@ 之后的剩余文本。
-
sed -e '0~3{s/ @@@[ ]\?//}':从每 3 行删除 @@@[ ]\?,以获取 ++<<<<<<< HEAD 之前的可选 1 行上下文。
-
sed '2~3 s/$/\n1/g':在第 2 行和第 3 行之间每 3 行添加 \n1 作为列号。
-
sed "N;N;N;s/\n/:/g":每 3 行加入一个 :。