假设我有两个分支branch1
和branch2
。我想查看分支中存在的那些文件的列表,这些文件在另一个文件中不存在。
我知道我能做到:
git diff --stat --color branch1 branch2
查看所有文件及其差异。此命令接近我想要的,因为它显示branch1
中不存在的文件:
folder/file1.py | 66 ++++++++
以及branch2
中未出现的内容:
folder/file2.py | 32 -----
但是这个命令还向我展示了在分支之间已经改变的所有其他文件的差异我希望过滤那些。当分支之间的大量文件发生变化时,这很不方便。
我怎样才能在分支机构之间只看到那些额外/删除的文件?基本上我需要看一个快速允许我说出这些文件的列表,这些文件存在于branch1
中并从branch2
中删除或反之亦然。
答案 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 section中git 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]"
表示只保留添加或删除文件的行。