Yanıtlar:
Sen istemek --statseçeneğine git diffveya bir komut dosyasında bu ayrıştırmak arıyorsanız --numstatseçeneği.
git diff --stat <commit-ish> <commit-ish>
--statbirleştirmelerden sonra görmeye alışık olduğunuz insan tarafından okunabilir çıktılar üretir; --numstatkomut dosyalarının kolayca yorumlayabileceği hoş bir tablo düzeni oluşturur.
Bir şekilde bunu aynı anda birden fazla taahhütte yapmak istediğinizi kaçırdım - bu bir görev git log. Ron DeVera buna değinir, ancak aslında bahsettiğinden çok daha fazlasını yapabilirsiniz. Yana git logdahili olarak istenen bilgileri yazdırmak için fark makine çağırır sen fark istatistik seçeneklerinden herhangi verebilir - sadece --shortstat. Kullanmak istediğiniz şey şudur:
git log --author="Your name" --stat <commit1>..<commit2>
ancak kullanabilir --numstatveya --shortstatyanı. git logtaahhütleri çeşitli şekillerde seçebilir - belgelere bir göz atın . --since(Karar aralıklarını belirtmek yerine, geçen haftadan bu yana taahhütleri seçin) ve --no-merges(birleştirme taahhütleri aslında değişiklik sunmaz ) gibi şeylerin yanı sıra güzel çıktı seçenekleri (--pretty=oneline, short, medium, full... ) .
Git günlüğünden taahhüt başına değişiklikler yerine toplam değişiklikleri almak için bir astar aşağıdadır (taahhüt seçimi seçeneklerini istediğiniz gibi değiştirin - bu, taahhüt1'den taahhüt2'ye kadar taahhüt eder):
git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'
(git günlüğünün kesinleştirme hakkında bazı tanımlayıcı bilgiler yazdırmasına izin vermelisiniz; Rasgele seçtim, sonra awk'yi yalnızca istatistik bilgisine sahip olan üç alanlı satırları seçmek için kullandım)
git diff --shortstat <commit1> <commit2>istediğim oydu.
--sinceve --until: gibi bir şey yesterday, 1 month 2 weeks 3 days 1 hour 1 second agoya da1979-02-26 18:30:00
<commit-ish>- genel taahhütler, şubeler, etiketler ve genel olarak ref'ler dahil bir taahhüdü temsil eden herhangi bir şeyle çalışır . Ayrıca bkz. Stackoverflow.com/questions/23303549/…
Tembel için kullanın git log --stat.
-10, önceki on taahhüt göstermek için bir ekledi .
Q, terminale dönmek için yazın.
git diff --shortstat
yalnızca değiştirilen ve eklenen satır sayısını verir. Bu yalnızca işaretlenmemiş değişikliklerle çalışır. Bir şubeyle karşılaştırmak için:
git diff --shortstat some-branch
git add, mutlaka yapıngit diff --shortstat --cached
git diff --stat commit1 commit2
DÜZENLEME: Taahhütleri de belirtmeniz gerekir (parametreler olmadan çalışma dizinini dizinle karşılaştırır). Örneğin
git diff --stat HEAD^ HEAD
üst öğesini karşılaştırma HEADile HEAD.
diff-index- diffön uç her şeyi halledebilir; dava diff-indexkapsamında --cached/--staged, inanıyorum. (Ve diff-indexOP'nin istediği gibi iki keyfi işi karşılaştırmak için kullanmanın bir yolu yoktur .)
git diff --stat HEAD
HEAD~n, yalnızca ebeveynden daha geriye doğru karşılaştırabilirsiniz n. git diff --stat HEAD~5 HEADHEAD'e göre son 5 taahhüt için birleştirilmiş istatistikler gösterecektir.
Abcd123 (ilk taahhüt) ile wxyz789 (son taahhüt) arasındaki tüm taahhütlerinizi dahil etmek istediğinizi varsayarsak:
git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"
Bu, aşağıdaki gibi özlü çıktılar verir:
abcd123 Made things better
3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
26 files changed, 53 insertions(+), 58 deletions(-)
--shortstatBayrak birlikte çalıştığı, harika git diffolsa (değil git log).
Tüm değişiklik günlüğünü belirli bir sürede almanın başka bir yolu
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"
Çıktı:
2637cc736 Revert changed code
1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
2 files changed, 4 insertions(+), 11 deletions(-)
Uzun çıktı içeriğiyle, daha okunabilir olması için dosyaya dışa aktarabilirsiniz
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt
Yukarıdaki tüm cevaplar doğru olsa da, son birçok işlemin sayısına ihtiyacınız varsa, birinin altında kullanmak yararlıdır
birinin altında son 5 taahhüt sayılır
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat
son 10 taahhüdü saymak
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
generic - N'yi ihtiyacınız olan son işlem sayısıyla değiştirin
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
başlangıçtan itibaren tüm taahhütlerin sayısını almak
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
git log --numstat size sadece sayıları verir
Bu sorunu kendim için çözdüm, bu yüzden bulduğum şeyi paylaşacağım. Sonuç:
> git summary --since=yesterday
total: 114 file changes, 13800 insertions(+) 638 deletions(-)
Temel komut şuna benzer:
git log --numstat --format="" "$@" | awk '{files += 1}{ins += $1}{del += $2} END{print "total: "files" files, "ins" insertions(+) "del" deletions(-)"}'
Not $@Tartışmalarınızın üzerinde gibi geçmesine günlük komuta --author="Brian"veya --since=yesterday.
Bir git takma adına koymak için awk'den kaçmak dağınıktı, bunun yerine, yolumdaki ( ~/bin/git-stat-sum) çalıştırılabilir bir komut dosyasına koydum , daha sonra komut dosyamdaki takma adda kullandım .gitconfig:
[alias]
summary = !git-stat-sum \"$@\"
Ve gerçekten iyi çalışıyor. Dikkat edilmesi gereken son bir şey file changes, değiştirilen benzersiz dosya sayısının değil, dosyadaki değişikliklerin sayısıdır. Aradığım şey bu, ama beklediğiniz gibi olmayabilir.
İşte bir iki örnek daha
git summary --author=brian
git summary master..dev
# combine them as you like
git summary --author=brian master..dev
git summary --all
Gerçekten, herhangi bir git logkomutu yerine koymanız gerekir git summary.