我可以让git diff只显示更改的文件名和行号吗?
基本上,我不想看到更改的内容,只是文件名和行号。
注意:如果您只是查找已更改文件的名称 ( 不包含已更改行的行号 ), 那很容易,请点击此链接查看另一个答案 。
有没有内置的选项(我不认为这是有用的),但是可以在一个“外部差异”脚本的帮助下做到这一点。
这是一个非常糟糕的一个; 这将取决于你自己想要的方式来修正输出。
#! /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手册页 (在第700行,非常接近结尾)的GIT_EXTERNAL_DIFF
说明。
太简单:
git diff --name-only
出发和差异!
行数与更改的行数或包含更改的实际行号相同? 如果你想要改变的行数,使用git diff --stat
。 这给你一个像这样的显示:
[me@somehost:~/newsite:master]> git diff --stat whatever/views/gallery.py | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
没有select获取更改本身的行号。
我知道这是一个老问题,但在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