Git diff只显示已被修改的行

当我做一个git diff时,它显示了已添加的行:

+ this line is added 

已被删除的行:

 - this line is removed 

但它也显示了许多没有修改的行:

 this line is not modified this line is also not modified 

这导致实际的git diff看起来像这样:

 + this line is added this line is not modified - this line is removed this line is not modified 

我可以让git只显示已修改的行,并忽略所有未修改的其他代码吗? 我已经写了一个方法,将删除所有在他们面前没有“+”或“ – ”符号的行,但我相信必须有一个更简单的方法来做到这一点。

在我的git diff中,我只对看到被修改的行感兴趣。

提前致谢。

你想要的是一个具有0行上下文的差异。 你可以用下面的方法产生

 git diff --unified=0 

要么

 git diff -U0 

您也可以将其设置为该存储库的configuration选项:

 git config diff.context 0 

要全局设置,对于任何存储库:

  git config --global diff.context 0 

另一个黑客(在un * x上)只显示以+-开头的行:

 git diff -U0 | grep '^[+-]' | grep -Ev '^(--- a/|\+\+\+ b/)' 

上面的代码执行以下操作:

  • git diff -U0 :select0上下文行
  • 第一个grep只包含所有以+-开头的行,
  • 第二个grep不包括以--- a/+++ b/

注意: – 如果你使用其他的git diff选项,比如-R ,– --src-prefix ,– --dst-prefix ,–no --no-prefix ,…,那么需要修改上面的解决scheme – 两个grep可以合并( grep -E -v '^(\+\+\+ b/|--- a/|@@ |diff --git|index )' ,但是我发现双grep版本更容易理解。

继克里斯的最新评论之后,后处理的主要问题是你想保持以-|+开头的行,但是你也想过滤掉以---|+++开头的行。 另一方面,如果你将补丁文件存储在你的repo(我在Pydoop中 ),你想要保留以--|++开头的行,所以正则expression式变得有点涉及:

 git diff | grep -P '^\+(?:(?!\+\+))|^-(?:(?!--))' 

正则expression式使用负面预测:请参阅Peter Boughton 对此问题的回答以获得详细解释。

如果你经常这样做,你可能需要为它设置一个git别名:

 git config --global alias.diffonly '!git diff | grep -P "^\+(?:(?!\+\+))|^-(?:(?!--))"'