Answers:
注意:如果您只是在寻找已更改文件的名称(不包含已更改行的行号),那很容易,请单击此链接到此处的另一个答案。
有没有内置的选项,这个(我不认为这一切都让无论是有用的),但它是有可能做到这一点的混帐,与“外部差异”脚本的帮助。
这是一个很烂的家伙。您可以根据自己的意愿来调整输出。
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac
path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7
printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'
有关“外部差异”详情,请参阅的说明GIT_EXTERNAL_DIFF
在git的手册页(左右线700,相当接近结束)。
| grep -o '^[0-9]*'
假设您不关心右侧,则使用管道给您提供的只是数字。
--diff-filter=...
的...
部分添加您要查看的更改类型:M
已修改,A
已添加,D
已删除以及其他git diff
。
太简单:
git diff --name-only
来比较吧!
git diff --name-only master..HEAD
行号与已更改的行数一样,还是包含更改的实际行号?如果要更改的行数,请使用git diff --stat
。这样可以显示如下:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
没有选择本身可以获取更改的行号。
git diff master --compact-summary
输出为:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
这正是您所需要的。与您进行提交或从远程提取新提交时的格式相同。
PS:这说明没有人回答。
我知道这是一个老问题,但是在Windows上,这会将git输出过滤到文件中并更改行号:
(git diff -p --stat) | findstr "@@ --git"
diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
要从中提取文件和更改的行需要更多的工作:
for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f
a/dir1/dir2/file.cpp
47,7
98,7
在上git version 2.17.1
,没有内置标志可实现此目的。
这是一个示例命令,用于从统一的diff过滤掉文件名和行号:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
例如,统一差异:
$ 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>
OR中的文件名或OR中匹配的行号@@@ <from-file-range> <from-file-range> <to-file-range>
匹配后的其余文本@@@
。sed -e '0~3{s/ @@@[ ]\?//}'
:@@@[ ]\?
从第3行中删除以获取之前的可选1行上下文++<<<<<<< HEAD
。sed '2~3 s/$/\n1/g'
:\n1
在第二行和第三行之间每三行添加一列。sed "N;N;N;s/\n/:/g"
:每3行加入一个:
。我grep
用作天真的解决方案。
$ git diff | grep -A2 -- '---'
输出示例:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
也许您可以看到彩色输出。它可以帮助您轻松读取输出。