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 "^\+(?:(?!\+\+))|^-(?:(?!--))"'