Git log svn log -v gibi dosya adlarını gösterme


987

SVN günlüğünde, her komutta değiştirilen dosyaların dosya adlarını veren "-v" modu vardır, örneğin:

jes5199 $ svn günlüğü -v
-------------------------------------------------- ----------------------
r1 | jes5199 | 2007-01-03 14:39:41 -0800 (Çar, 03 Oca 2007) | 1 satır
Değişen yollar:
   A / YAZARLAR
   A / KOPYALAMA
   A / ChangeLog
   A / EVRİM
   A / KURULUM
   A / MacOSX

Git'teki her işlemde değişen dosyaların bir listesini almanın hızlı bir yolu var mı?


15
Merak ediyorum neden git logbu -vkadar çok bekle / isteme gibi bir anahtarı desteklemiyor ? </gripe>
MarkHu

Yanıtlar:


1528

Değiştirilen dosyaların tam yol adları için:

git log --name-only

Tam yol adları ve değiştirilen dosyaların durumu için:

git log --name-status

Kısaltılmış yol adları ve değiştirilen dosyaların farklılığı için:

git log --stat

Çok daha fazla seçenek var, dokümanlara göz atın .


17
Ben kullanıyorum git log --numstat. Daha git help logfazla seçenek için bkz .
ma11hew28

29
git log --name-only --onelineaynı zamanda oldukça gösterişlidir - taahhüt için bir renkli satır ve satır başına bir dosya. stackoverflow.com/a/14227496/1995714
cp.engr

4
Git 2.7.3 ile, git log --name-status --find-renamesekleme + silme yerine yeniden adlandırılmış dosyaları göstermek için kullanmak zorunda kaldı .
Suzanne Dupéron

1
Not --statuzun yolları kısaltır; genişlik yapılandırılabilir ancak sarılmış histogramların okunması daha zordur. --numstatHer zaman tam yol yazdırmak gibi diğer biçimler .
Beni Cherniavsky-Paskin

@ ma11hew28 Teşekkürler. --numstatgit 2.22.00 itibariyle bu kılavuz sayfanın 946. satırındadır. Bu , çoğu insanın ihtiyaç duyduğundan çok daha fazla seçenek.
Monica'yı eski durumuna getirin - M. Schröder

139

NOT: kullanımdan kaldırıldı, bunun yerine kullanın git whatchangedgit log

Yeni kullanıcıların bunun yerine git-log [1] kullanmaları önerilir . whatchangedKomut, esas olarak aynı olan git-log [1] ham formatında fark çıkış göstermek ve birleştirir atlamak ancak varsayılan.

Komuta öncelikli olarak tarihi nedenlerle korunur; Git'i uzun zaman önce öğrenen birçok kişinin parmakları, git logLinux çekirdek posta listesi okunarak icat edildi ve onu yazmak için eğitildi.


Komutu, her komutta (komut git whatchanged --statmesajıyla birlikte) değişen dosyaların listesini almak için kullanabilirsiniz .

Referanslar


50

git show aynı zamanda büyük bir emirdir.

Bu bir tür svn diff, ama bunu bir taahhüt kılavuzu geçirebilir ve farkını görebilirsiniz.


46

Dosya adlarını yalnızca taahhüt mesajının geri kalanı olmadan almak istiyorsanız şunları kullanabilirsiniz:

git log --name-only --pretty=format: <branch name>

Bu daha sonra dosya adını içeren çeşitli seçenekleri kullanacak şekilde genişletilebilir:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

Bu yöntemi kullanırken dikkat edilmesi gereken bir nokta, çıktıda göz ardı edilmesi gereken bazı boş satırların olmasıdır. Yerel bir dalda değiştirilmiş, ancak henüz uzak bir şubeye gönderilmemiş olan dosyaları görmek istiyorsanız ve uzaktan kumandadan en son alınanların zaten içeri alındığının garantisi yoksa, bunu kullanmak yararlı olabilir. :

git log --name-only --pretty=format: my_local_branch --not origin/master

Yerel dalda değiştirilmiş, ancak henüz uzaktan kumandadaki ana dalla birleştirilmemiş tüm dosyaları gösterir.


1
Yukarıdaki örneklerde boşluk ile ilgili not - gibi git log --stat --pretty="format:" $branchName,. Örneğin git log --stat --pretty="format:" $(git rev-parse --abbrev-ref HEAD),. Ben git log --name-only --pretty="format: " master..$(git rev-parse --abbrev-ref HEAD)
oradayken, işte amacımla

41

Değişen dosyalarla geçmişini göstermek için günlük olarak bunu kullanıyorum:

git log --stat --pretty=short --graph

Kısa tutmak için şunu .gitconfigyaparak bir takma ad ekleyin :

git config --global alias.ls 'log --stat --pretty=short --graph'

Benimki buna çok yakın, git log --pretty = oneline --graph --name-status. Değişen dosyaların listesini göstererek daha özlü buluyorum.
Peter Suwara

15

Bunu kullanıyorum:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

yalnızca dosyaların ve durumlarının bir listesini çıktılar (eklendi, değiştirildi, silindi):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...

7

git diff --stat HEAD^!son kaydedilen ( HEAD) için değiştirilmiş dosyaları ve eklenen / kaldırılan satır sayısını gösterir .

Bana öyle geliyor ki, sadece dosya adlarından oluşan kısa bir çıktı almak için tek bir komut yok ve aynı anda birkaç taahhüt için satır sayıları eklendi ve kaldırıldı, bu yüzden bunun için kendi bash betiğimi oluşturdum:

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

Örneğin; ./changed_files 99özlü bir biçimde değişiklikleri almak HEADiçin HEAD~99. Borulanabilir örneğin. için less.


Eğer yapamaz git diff --stat HEAD..masterEğer 2012 yılında cevabınız geri gönderildi değilken bu var mıydı KAFA ve usta arasındaki farkı göstermek için, ya?
Ferrybig

1
@Ferrybig OP'ın soru nasıl olduğunu "taahhüt her değişti dosyaların listesini elde etmek için" değil yaklaşık, fark arasındaki HEADve master. Bunlar iki farklı şey.
nrz

4

Aşağıdakileri kesin bir biçimde kesinleştirme başına hangi dosyaların değiştirdiğini listelemek için ideal bir ekran olduğunu düşünüyorum:

git log --pretty=oneline --graph --name-status

3

Örnek çıktı ile cevapların özeti

Bu, beş basit taahhüt içeren yerel bir depo kullanıyor.

‣ git log --name-only
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

file2
file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

file1
file2
file3


‣ git log --name-status
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

R100    file4   file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

M       file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

M       file2
D       file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

A       file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

A       file1
A       file2
A       file3


‣ git log --stat
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

 file1 | 3 +++
 1 file changed, 3 insertions(+)

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

 file2 | 1 +
 file3 | 0
 2 files changed, 1 insertion(+)

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

 file4 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

 file1 | 0
 file2 | 0
 file3 | 0
 3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --oneline
ed080bc (HEAD -> master) mv file4 to file5
file5
5c4e8cf foo file1
file1
1b64134 foobar file2, rm file3
file2
file3
e0dd02c Add file4
file4
b58e856 Added files
file1
file2
file3


‣ git log --pretty=oneline --graph --name-status
* ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master) mv file4 to file5
| R100  file4   file5
* 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328 foo file1
| M     file1
* 1b6413400b5a6a96d062a7c13109e6325e081c85 foobar file2, rm file3
| M     file2
| D     file3
* e0dd02ce23977c782987a206236da5ab784543cc Add file4
| A     file4
* b58e85692f711d402bae4ca606d3d2262bb76cf1 Added files
  A     file1
  A     file2
  A     file3


‣ git diff-tree HEAD
ed080bc88b7bf0c5125e093a26549f3755f7ae74
:100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D  file4
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A  file5


‣ git log --stat --pretty=short --graph
* commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
| Author: My Name <user@email.com>
| 
|     mv file4 to file5
| 
|  file4 => file5 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
| Author: My Name <user@email.com>
| 
|     foo file1
| 
|  file1 | 3 +++
|  1 file changed, 3 insertions(+)
| 
* commit 1b6413400b5a6a96d062a7c13109e6325e081c85
| Author: My Name <user@email.com>
| 
|     foobar file2, rm file3
| 
|  file2 | 1 +
|  file3 | 0
|  2 files changed, 1 insertion(+)
| 
* commit e0dd02ce23977c782987a206236da5ab784543cc
| Author: My Name <user@email.com>
| 
|     Add file4
| 
|  file4 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit b58e85692f711d402bae4ca606d3d2262bb76cf1
  Author: My Name <user@email.com>

      Added files

   file1 | 0
   file2 | 0
   file3 | 0
   3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --pretty=format:
file5

file1

file2
file3

file4

file1
file2
file3


‣ git log --name-status --pretty=format:
R100    file4   file5

M       file1

M       file2
D       file3

A       file4

A       file1
A       file2
A       file3


‣ git diff --stat 'HEAD^!'
 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)


‣ git show
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

diff --git a/file4 b/file5
similarity index 100%
rename from file4
rename to file5


Kredi CB @ Bailey-Peter-Suwara @Gaurav @ Omer-Dagan @xsor @Hazok @nrz @ptc


0

Başka bir yararlı komut, git diff-tree <hash>karma değerinin de bir karma aralığı olabileceği ( <old>..<new>gösterim ile gösterilir ) olabilir. Bir çıktı örneği:

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

Alanlar:

kaynak modu, hedef modu, kaynak karması, hedef karması, durum, dosya adı

Durumlar beklediğiniz durumlardır: D (silindi), A (eklendi), M (değiştirildi) vb. Tam açıklama için kılavuz sayfasına bakınız.


0

Genellikle günlükleri almak için bunları kullanın:

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"

1
Bu seçenekleri bilmiyordum, ancak günlüğü filtrelediğini açıkladıysa bu yazı daha yararlı olacaktır. Bir an için, yazarların çıktıda listelenme şeklini değiştirmenin bir yolu olduğunu düşündüm.
Stein
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.