我可以让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