2014-12-05 159 views
1

說我有兩個分支branch1branch2之間唯一的額外/刪除的文件。我想查看分支中存在的那些文件的列表,這些文件不存在於另一個文件中。混帳:顯示分支

我知道我可以做:

git diff --stat --color branch1 branch2 

看到所有的文件和它們的diff。此命令來接近我想要的,因爲它顯示的文件在branch1不存在:

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

與那些沒有出現在branch2爲:

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

但該命令也顯示我的差異文件,所有其他文件已在分支之間更改,我想過濾這些。當很多文件在分支之間改變時,這是不方便的。

我怎麼能看到樹枝之間只有那些額外/刪除的文件?基本上我需要看到一個列表,可以很快讓我說「這些文件存在於branch1中,並從branch2中刪除或反之亦然」。

回答

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)。還有其他人。下面是從git help diffRaw Output Format section一個片段:

    in-place edit :100644 100644 bcd1234...... 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]"說只保留該文件已被添加或刪除線。

+0

這似乎很好地工作。你介意一下這個命令的作用嗎?謝謝! – Gabriel 2014-12-05 13:45:41

+1

@ Gabriel我更新了我的答案,提供了更多關於正在發生的事情的信息。希望你覺得它有用! – jszakmeister 2014-12-05 15:29:54

+0

優秀的解釋jszakmeister,謝謝! – Gabriel 2014-12-05 15:55:57