Git:只显示分支之间的额外/删除文件

时间:2014-12-05 12:51:52

标签: git branch

假设我有两个分支branch1branch2。我想查看分支中存在的那些文件的列表,这些文件在另一个文件中不存在。

我知道我能做到:

 git diff --stat --color branch1 branch2

查看所有文件及其差异。此命令接近我想要的,因为它显示branch1中不存在的文件:

folder/file1.py              |  66 ++++++++

以及branch2中未出现的内容:

folder/file2.py              |  32 -----

但是这个命令还向我展示了在分支之间已经改变的所有其他文件的差异我希望过滤那些。当分支之间的大量文件发生变化时,这很不方便。

我怎样才能在分支机构之间只看到那些额外/删除的文件?基本上我需要看一个快速允许我说出这些文件的列表,这些文件存在于branch1中并从branch2中删除或反之亦然。

1 个答案:

答案 0 :(得分:1)

您可能可以使用git diff --raw来解决此问题,但我不确定它是如何解决重命名的:

git diff branch1 branch2 --raw | cut -f 5- -d ' ' | grep "^[AD]"

以下是它的作用:

  • git diff branch1 branch2 --raw基本上发出git status的机器可解析版本。例如:

    :: git diff 139a34^ 139a34 --raw
    :100644 100644 313c68b... 9852990... M  plugin/togglecursor.vim
    

    第5列有一个状态标志,表明文件是被修改(M),删除(D)还是添加(A)。还有其他人。以下是Raw Output Format sectiongit help diff的摘录:

       in-place edit  :100644 100644 bcd1234... 0123456... M file0
       copy-edit      :100644 100644 abcd123... 1234567... C68 file1 file2
       rename-edit    :100644 100644 abcd123... 1234567... R86 file1 file3
       create         :000000 100644 0000000... 1234567... A file4
       delete         :100644 000000 1234567... 0000000... D file5
       unmerged       :000000 000000 0000000... 0000000... U file6
    
  • cut -f 5- -d ' '表示要删除前4列数据。所以我们只保留状态标志和它之后的路径。

  • 最后,grep "^[AD]"表示只保留添加或删除文件的行。