如何使用“git diff”排除补丁头?

时间:2017-11-26 12:44:29

标签: git

例如,在git diff

的以下输出中
diff --git a/commands.txt b/commands.txt
index 79e881a..a9588e5 100644
--- a/commands.txt
+++ b/commands.txt
@@ -1,3 +1,7 @@
+this is an example
+abcxyz
+helllo
+wooo
 makeFilePermissionExecutable
 makeOwnedByMyself
 makeFilePermissionEverything

是否可以隐藏以下内容:

diff --git a/commands.txt b/commands.txt
index 79e881a..a9588e5 100644
--- a/commands.txt
+++ b/commands.txt

而只是显示文件名(在本例中为commands.txt)而不是?

3 个答案:

答案 0 :(得分:3)

git diff | tail -n +5将生成您想要的输出。

我们将git diff的输出导入tail -n +5以开始第5行的输出。请参阅man的{​​{1}}页面:

tail -n

如果您希望将 -n, --lines=[+]NUM output the last NUM lines, instead of the last 10; or use -n +NUM to output starting with line NUM --- a/commands.txt合并为一行,则必须执行一些额外的正则表达式工作。

答案 1 :(得分:3)

git diff etc \
| sed '/^diff /,/^@@/ {
    H;/^@@/!d;z;x
    s".*\n--- a/\([^\n]*.\)+++ b/\1"==> File: \1"
}
'

这是“在^diff^@@开始的块中累积所有行,如果文件不是新的,则重新格式化标题”。

答案 2 :(得分:2)

我找到了一个解决方法:

在PATH中访问以下文件:

<强> customGitDiff

#!/usr/bin/env bash

echo "$(tput setaf 4) $1"
echo -n "$(tput setaf 4)"
printf "%$(tput cols)s"|tr ' ' '-'
diff -u "$1" "$2" | tail -n +3 | colordiff
echo ""

然后你可以指示git使用以下脚本作为你的diff工具。可以通过在~/.gitconfig中设置以下内容进行全局设置:

[diff]
  external = customGitDiff

一个可能不幸的限制是,我不确定它是否使用与git diff相同的diff算法。

以上为我提供了以下输出: enter image description here