Git-diff ve git log nasıl yeni ve silinmiş dosyaları yoksaymak için?


155

Bazen bazı yeni, silinmiş ve / veya yeniden adlandırılmış dosyalarla birlikte değiştirilmiş birkaç dosya olabilir. Yaparken git diffya da git-logatlamak isterim, böylece değişiklikleri daha iyi tespit edebilirim.

Aslında, yeni ve silinmiş dosyaların içeriği olmadan adları listelenmek en iyisidir. "Eski" olarak adlandırılan "eski" için isteğe bağlı olarak "eski" ve "yeni" arasındaki farkı almak istiyorum.

Yanıtlar:


217

--diff-filterSeçeneği ile çalışır diffve log.

--diff-filter=MDif çıkışları yalnızca içerik değişiklikleriyle sınırlayan çok şey kullanıyorum .

Yeniden adlandırmaları ve kopyaları algılamak ve bunları diff çıktısında kullanmak için -Mve -Cile birlikte sırasıyla Rve Cseçeneklerini kullanabilirsiniz --diff-filter.


3
git logBununla kullanıldığında, yalnızca dosya ekleyen ve / veya kaldıran taahhütleri tamamen yok saymasına neden olur.
qqx

7
Yalnızca tek bir veri türünü hariç tutmanın bir yolu var mı? Gibi bir şey--diff-filter=!D
Kamil Dziedzic

24
@Kamil Evet, var. Belgelerden alıntı:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser

62
  • Resmi belge:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Yalnızca Eklenen (A), Kopyalanan (C), Silinmiş (D), Değiştirilmiş (M), Yeniden Adlandırılan (R) dosyaları türlerini değiştirir (yani normal dosya, sembolik bağlantı, alt modül,…) değiştirilir (T), Birleştirilmemiş (U), Bilinmiyor (X) veya eşleşmeleri Kırık (B). Filtre karakterlerinin herhangi bir kombinasyonu (hiçbiri dahil) kullanılabilir.

Kombinasyona * (Tümü veya Hiçbiri) eklendiğinde, karşılaştırmadaki diğer ölçütlerle eşleşen herhangi bir dosya varsa tüm yollar seçilir; diğer ölçütlerle eşleşen dosya yoksa hiçbir şey seçilmez.

Ayrıca, bu büyük harfler dışarıda bırakılmak üzere küçültülebilir. Örneğin --diff-filter = reklam, eklenen ve silinen yolları hariç tutar.

Örnek: yalnızca eklenen, değiştirilen, değiştirilen dosyaları göster silinen dosyaları hariç tutar:

git diff --diff-filter=ACM

2
Yolları hariç tutmak için küçük harf seçeneklerini ve yolları dahil etmek için büyük harf seçeneklerini kullanma hakkında iyi bir not.
stuyam

-3

GÜNCELLEME: Kabul cevap Charles Bailey tarafından doğru biridir; istenen işlevsellik zaten git.

Bu cevabı burada bırakacağım çünkü git'e dahil olmayan şeyler için fikir verebilir.


git diffyeni ve silinmiş dosyaları karşılaştırarak gösterir /dev/null. Bir /dev/nullsonraki fark için aşağıdaki satırları arayan ve filtreleyen bir şey yazmak (Perl'i kendim kullanırım) çok zor olmamalı . Sonra git diff ... | the-filter.

Yeniden adlandırılan dosyalar farklı bir konudur; Buna (henüz) iyi bir cevabım yok.


Bu iyi, ama bu şekilde çağrı cihazını (daha az) yalnızca gerektiğinde kullanma olanağını kaybederdim, değil mi?
maaartinus

@maaartinus: Sanırım; Bunu düşünmemiştim. (Şahsen, git çağrı cihazımı "kedi" olarak ayarladım ve ... | lessaçıkça kullanıyorum.) less'S -Eveya -Fseçeneğine bakabilirsiniz (sistemimde çıktıyı görmeme izin vermiyor olsa da).
Keith Thompson

Tamam, sorun değil ama diğer cevaba bakın.
maaartinus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.