[英]How to make git-diff and git log ignore new and deleted files?
有時會有幾個更改的文件以及一些新的、刪除的和/或重命名的文件。 在執行git diff
或git-log
時,我想省略它們,這樣我可以更好地發現修改。
實際上,最好只列出新文件和已刪除文件的名稱而不包含其內容。 對於重命名為“新”的“舊”,我想有選擇地獲得“舊”和“新”之間的區別。
--diff-filter
選項適用於diff
和log。
我使用--diff-filter=M
,它將diff輸出限制為僅內容修改。
要檢測重命名和副本並在diff輸出中使用它們,可以分別使用-M
和-C
以及--diff-filter
的R
和C
選項。
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
僅選擇已添加(A),復制(C),刪除(D),修改(M),重命名(R)的文件,其類型(即常規文件,符號鏈接,子模塊,...)已更改(T),是未合並(U),未知(X),或已配對破碎(B)。 可以使用過濾器字符的任何組合(包括無)。
當*(全部或全部)添加到組合中時,如果有任何文件與比較中的其他條件匹配,則選擇所有路徑; 如果沒有與其他條件匹配的文件,則不會選擇任何內容。
此外,這些大寫字母可以降級為排除。 例如--diff-filter = ad排除添加和刪除的路徑。
示例:僅顯示添加,更改,修改的文件,不包括已刪除的文件:
git diff --diff-filter=ACM
此外,這些大寫字母可以小寫以排除。
例如--diff-filter=ad
排除添加和刪除的路徑。
在您的情況下, git diff --diff-filter=ad
會起作用,但請確保不要在同一過濾器中使用大小寫字母,除非您有 Git 2.36(2022 年第二季度)。
“ git diff --diff-filter=aR
” ( man )現在被正確解析。
請參閱Johannes Schindelin ( dscho
)的提交 75408ca 、 提交 4d4d4ea和提交 d843e31 (2022 年 1 月 28 日)。
(由Junio C Hamano 合並gitster
提交 9a16099,2022年 2 月 16 日)
diff-filter
:尋找負位時要更加小心簽字人:Johannes Schindelin
--diff-filter=<bits>
選項允許按特定條件過濾差異,例如R
以僅顯示重命名的文件。
它還支持通過小寫字母否定過濾器,即
r
顯示重命名文件以外的所有內容。然而,當試圖弄清楚
git diff
( man )是否應該以打開所有 diff-filters 開始時,代碼有點過分熱心,因為用戶提供了一個小寫字母:如果--diff-filter
參數以大寫開頭-case 字母,我們不能以所有位都打開的方式開始。更糟糕的是,可以在多個單獨的選項中指定 diff 過濾器,例如
--diff-filter=AM [...] --diff-filter=m
。讓我們獨立地累積包含/排除過濾器,並且在完全解析選項之后僅對“僅指定排除過濾器”的情況進行特殊處理。
更新: Charles Bailey 接受的答案是正確的; 所需的功能已經內置到git中。
我將在這里留下這個答案,因為它可能為沒有內置到git中的東西提供想法。
git diff
通過將它們與/dev/null
進行比較來顯示新文件和已刪除文件。 寫一些東西(我自己使用Perl)尋找/dev/null
並過濾掉下面的行直到下一個差異應該不會太難。 然后git diff ... | the-filter
git diff ... | the-filter
。
重命名的文件是另一回事; 我(還)沒有那個好的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.