簡體   English   中英

如何讓 git-diff 和 git 日志忽略新的和刪除的文件?

[英]How to make git-diff and git log ignore new and deleted files?

有時會有幾個更改的文件以及一些新的、刪除的和/或重命名的文件。 在執行git diffgit-log時,我想省略它們,這樣我可以更好地發現修改。

實際上,最好只列出新文件和已刪除文件的名稱而不包含其內容。 對於重命名為“新”的“舊”,我想有選擇地獲得“舊”和“新”之間的區別。

--diff-filter選項適用於diff和log。

我使用--diff-filter=M ,它將diff輸出限制為僅內容修改。

要檢測重命名和副本並在diff輸出中使用它們,可以分別使用-M-C以及--diff-filterRC選項。

  • 官方文件:
 --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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM