git diff只输出文件名

时间:2017-09-20 21:26:55

标签: git bash git-diff

我在Bash窗口中的标签上使用git diff,并且它在大多数情况下执行我想要的操作。

$ git diff -- numstat TAG2 TAG1

给出这个输出:

4  6  dir1/dir2/dir3/dir4/thisIsMyFile.cs

如何获得此输出:

4  6  thisIsMyFile.cs

我不需要/想要路径(dir1/dir2/dir3/dir4/),只需要文件名(thisIsMyFile.cs)。

3 个答案:

答案 0 :(得分:2)

据我所知,单凭Git没有办法做到这一点(即只给Git diff正确的参数)。您必须使用Bash管道来后处理Git输出。我建议:

git diff --numstat TAG2 TAG1 | while IFS= read -r line; do
    printf '%s\t' "$(cut -f-2 <<<"$line")"
    basename "$(cut -f2- <<<"$line")"
done

这有点复杂,因为它旨在保留原始格式并正确解析,即使文件中包含选项卡或空格也是如此。如果您可以保证文件名中没有空格,或者您有兴趣使用比Bash更强大的脚本语言来解析行,则可以简化它。

答案 1 :(得分:1)

您可以使用awk

git diff --numstat | awk -F'[/\t]' '{print $1,$2,$NF}'

awk命令在做什么?

-F'[/\t]'字段分隔符设置为tab或/。 (git的输出是制表符分隔的)。 $NF是该行中的 last 字段 - 文件名。

注意:当文件名包含选项卡时,上述命令将失败。如果你能忍受这种限制,那就玩得开心吧!

答案 2 :(得分:0)

使用basename -a $(git diff --numstat TAG1 TAG2)

注意我使用bash语法执行子命令。

相关问题