Bir taahhütteki tüm dosyalar nasıl listelenir?


2792

Ben githiçbir bilgi ile bir karma (SHA1) tarafından verilen taahhüdün bir parçası olan tüm dosyaların güzel biçimlendirilmiş bir listesini sağlayan basit bir komut arıyorum .

Denedim:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Dosyaları listelemesine rağmen, her biri için istenmeyen fark bilgileri de içerir.

Çıktıdan gitayrıştırmaktan kaçınabilmem için sadece istediğim listeyi sağlayacak başka bir komut var mı git show?


43
Buraya biraz farklı bir şey aramaya geldim. Tüm dosyaları bir dizi taahhüt için değiştirilmiş görmek ve git log --until 2013-05-21 --pretty="short" --name-onlyiyi bir efekt kullanarak yaralamak istiyorum .
Sınırlı Kefaret

4
Önceki ntaahhütlerden tüm değişiklikleri mastergit diff-tree --name-status -r @{3} master
ako

3
git diff --name-only master- Ana dal ile karşılaştırıldığında, geçerli daldaki TÜM değiştirilmiş dosyaları listelemek için.
Noam Manos

Yanıtlar:


3760

Tercih Edilen Yol (çünkü bir sıhhi tesisat komutu; programlı olması gerekiyordu):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Başka Bir Yol (komut dosyaları için daha az tercih edilir, çünkü bu bir porselen komutudur; kullanıcıya dönük olması gerekiyordu)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-idBastırır İD çıkış işlemek.
  • --prettyArgüman başında cruft önlemek için boş bir biçim dizesi belirtir.
  • --name-onlyEtkilendi argüman gösterileri sadece dosya adları (teşekkürler Hank). Kullan --name-statusher dosyada ne olduğunu görmek istiyorsanız, bunun yerine ( D , eleted M değişmemiş, A dded)
  • -rArgüman alt ağaçların recurse etmektir

25
diff-treeKök taahhüdüne bakarken işe yaramayacağına dikkat edilmelidir .
jbranchaud

327
--name-onlySeçeneğin değiştirilmesi --name-statusdaha net bir özet verecektir.
Kurt Zhong

20
Kök işleminde çalışmasını istiyorsanız, --root bayrağını kullanın. Man sayfasından: --root belirtildiğinde, ilk işlem büyük bir oluşturma olayı olarak gösterilir. Bu, NULL ağacına karşı bir fark ile eşdeğerdir. "
Chris

24
git log --name-only -n 1 <hash>Son taahhüt:git log --name-only -n 1 HEAD~1..HEAD
Kurt

10
Eğer biri (benim gibi) ilk yolun neden "tercih" olduğunu merak ediyorsa, @drizzt'in yorumuna geri döner; git show"porselen" dir (kullanıcıya bakacak şekilde) ve git diff-tree"sıhhi tesisat" tır (programlı olarak, örneğin komut dosyalarından kullanılmak üzere). (Git sürdürücüler damla böylece zamanla eski arayüzü değişebilir --name-onlyOnların hayal olmadığı halde olur useability nedenlerle) ikincisi için arayüz uyumluluğu nedenlerle mümkün olduğunca istikrarlı olarak tutulacaktır oysa.
killscreen

237

Değiştirilen dosyaların listesini almak istiyorsanız:

git diff-tree --no-commit-id --name-only -r <commit-ish>

Bir işlemdeki tüm dosyaların listesini almak istiyorsanız şunu kullanabilirsiniz:

git ls-tree --name-only -r <commit-ish>

1
--Name-only içeren ls-tree 1.6.4.4 veya 1.6.3.3 üzerinde çalışmıyor gibi görünüyor. Sence bu bir hata mı?
krosenvold

git ls-tree --name-only HEAD(<commit-ish> parametresi gereklidir ; bu örnekte HEAD) git sürüm 1.6.4.3 ile çalışır
Jakub Narkibski

2
Burada parametrelerin sıralaması önemlidir.
Gönderinizdeki kişi

5
SHA1'i --no-commit-idyazdırmamak için şu şekilde geçin:git diff-tree --no-commit-id --name-only -r <commit-ish>
John Mellor

3
@CoDEmanX: Eklemeyi -r/ -tseçeneği kaçırmadınız, değil mi? Çünkü diff-tree hem değiştirilmiş hem de eklenen dosyaları işler. Tüm yeni (eklenen) dosyaları listelemek istiyorsanız, kullanıngit diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish>
Jakub Narębski

226

Bunun gitkistenmediğini varsayacağım . Bu durumda, deneyin git show --name-only <sha>.


36
- sadece isim ihtiyacım olduğunda çoğu durumda bol; Bu nedenle, en kısa çözümü (ve 1 denemede hatırlayacağım tek çözüm) onayladı.
Erik S

25
Veya --name-status.
Neil Traft

CLI git'i gerçekten seven biri olarak gitk, aslında dosyaları gözden geçirmenin ve farkın bulunduğu dosyayı görüntülemenin iyi bir yoludur. Örneğin bir akrandan bir canavar taahhüdünü gözden geçiren kod.
Elijah Lynn

192

Ben şahsen kombinasyonunu kullanmak --stat ve --oneline ile gösteri komutu:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

Bunu yaparsanız / ekleme / kaldırma istatistikleri ister gibi olmasın, yerine --stat ile --name okunur

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

4
Bu harika! Temel olarak Github'un bir taahhüt görünümünün üstünde gösterdiği dosya özetini verir. Teşekkürler.
trisweb

Çok hoş. Bir takma ad tanımlamak için:, alias gits='git show --stat --oneline'daha sonra gitstek başına en son değişiklikleri (HEAD'de) gits b24f5fbgösterirken, herhangi bir revizyonun değişikliklerini göstermek için kullanılabilir.
Brent Faust

5
Birisi de git takma adı oluşturabilir ... örneğin git config --global alias.changes 'show --stat --oneline'. Daha sonra git changes(isteğe bağlı bir taahhütle) yazabilir ve yukarıdaki ilk örneklerden çıktı alabilirsiniz.
13'te

Windows için Git çift tırnak gerektirir:git config --global alias.changes "show --stat --oneline"
Alchemistmatt

3
Güzel. Ve kabul edilen cevabın aksine, git showsaklanan değişiklikleri gözden geçirmek için de çalışır: örneğingit show --stat --oneline stash@{1}
Jeff Ward

83

Ayrıca yapabilirsin

git log --name-only

ve çeşitli işlemlere göz atabilir, mesajlara ve değişen dosyalara göz atabilirsiniz.

İsteminizi geri almak için q yazın.


Teşekkürler, yardımcı olur. BTW: git show 5944ad2a8b5 --name-onlybelirli bir taahhüdün adını listelemek için kullanın
LiuWenbin_NO.

68

Son zamanlarda iki taahhüt arasında değişen tüm dosyaları listelemek gerekiyordu. Bu yüzden (ayrıca * nix'e özgü) komutu kullandım

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

Güncelleme : Veya Ethan'ın aşağıda belirttiği gibi

git diff --name-only START_COMMIT..END_COMMIT

Kullanarak --name-status, her dosyanın yanında değişiklik (eklenen, değiştirilen, silinen vb.)

git diff --name-status START_COMMIT..END_COMMIT

4
Eğer kullanırsanız, git diff --name-status START_COMMIT..END_COMMITo zaman sonlara ihtiyacınız yoktur |sort | uniq.
Ethan

Yukarıdaki yoruma düzeltme:git diff --name-only START_COMMIT..END_COMMIT
Ethan

Aradığım şey buydu. Nasıl kullanılır: git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'. Sadece binlerce PNG ve XML düzenini ekleyen büyük bir PR için kod değişikliklerinin bir listesini istedim.
AutonomousApps

63

En basit hal:

git show --stat (hash)

Bunu hatırlamak daha kolaydır ve size ihtiyacınız olan tüm bilgileri verecektir.

Eğer gerçekten sadece dosya isimlerini istiyorsanız --name-onlyseçeneği ekleyebilirsiniz .

git show --stat --name-only (hash)


2
- yalnızca ad, yazar, tarih ve tamamlama mesajı gibi bilgileri içeren birkaç başlık satırı içerir.
yutulmuş elysium

sadece birleştirme taahhüdü için işe yaradığını buldum
Alex Punnen

47

Kullandığım Değiştirilen bir oldukça sık takma adı. Ayarlamak için:

git config --global alias.changed 'show --pretty="format:" --name-only'

sonra:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

Yararlı olabilecek benzer komutlar:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

40

kullanım

git log --name-status

Bu size taahhüt kimliğini, mesajını, değiştirilen dosyaları ve değiştirilmiş, oluşturulmuş, eklenmiş veya silinmiş olup olmadığını gösterir. Biraz hepsi bir arada komut.


38

Standart git diff komutunu kullanma (komut dosyası oluşturma için de iyidir):

git diff --name-only <sha>^ <sha>

Değiştirilen dosyaların durumunu da istiyorsanız:

git diff --name-status <sha>^ <sha>

Bu, birleştirme taahhütlerinde işe yarar.


26

ad için bu komutu deneyin ve satır sayısını değiştirin

git show --stat <commit-hash>

sadece dosya adlarını göster

git show --stat --name-only  <commit-hash>

son taahhüt karmasını almak için bu komutu deneyin

git log -1

gösteri dosyalarının adı ve dosya durumu ile son taahhüt değiştirme, oluşturma veya silme

 git log -1 --oneline --name-status <commit-hash>

veya herkes için

git log

daha gelişmiş git log bilgisi için bu makaleyi okuyun

https://devhints.io/git-log-format

https://devhints.io/git-log


1
@DanFare "ölümcül: tanınmayan argüman: - sadece adlar" 2.20.1.windows.1
user2864740

24
$ git log 88ee8 ^ .. 88ee8 - salt ad --pretty = "biçim:"

20

Tamam, belirli bir işlemdeki tüm dosyaları göstermenin birkaç yolu vardır ...

Bilgiyi azaltmak ve yalnızca taahhüt edilen dosyaların adlarını göstermek için basitçe ekleyebilir --name-onlyveya --name-statusişaretleyebilirsiniz ..., bu bayraklar size önceki taahhütlerden farklı olan dosya adlarını istediğiniz gibi gösterir ...

Yani yapabilirsiniz git diffardından --name-onlysonraki iki karmaları işlemek ile <sha0> <sha1>aşağıda gibi bir öğe:

git diff --name-only 5f12f15 kag9f02 

Bu durumda atmanız gereken tüm adımları göstermek için aşağıdaki resmi de oluşturuyorum:

git diff - sadece ad 5f12f15 kag9f02


Neden iki referans (onlara hash isimlerini söylüyorsunuz)?
hakre

15

İki değişiklik kümesi arasında değiştirilmiş dosyaların listesini almak için bunu kullanın:

git diff --name-status <SHA1> <SHA2> | cut -f2

Evet, ancak durum oldukça kullanışlı olabilir (isntance için, gibi bir şeyle silinmiş olanlar dışındaki tüm dosyaları görüntülemek için grep isteyebilirsinizgit diff --name-status .. | grep ^[^D] | cut -f2
Pierre-Adrien Buisson


14

Ayrıca git whatchanged, daha düşük bir seviye var.git log

NAME
       git-whatchanged - Show logs with difference each commit introduces

Taahhüt özetini, modlarıyla altındaki dosyaların bir listesiyle ve eklenmiş ( A), silinmiş ( D) veya değiştirilmiş ( M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Gibi bir şey verir:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <xx@xx.nl>
Date:   Tue Sep 29 17:23:22 2015 +0200

    added fb skd and XLForm

:000000 100644 0000000... 90a20d7... A  Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A  Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A  Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A  Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A  Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A  Pods/Bolts/Bolts/Common/BFTask.h
...

Bu cevabın "hiçbir yabancı bilgi olmadan" gerçekten eşleşmediğini biliyorum, ancak yine de bu listenin sadece dosya adlarından daha yararlı olduğunu düşünüyorum.


Ayrıca, whatchangedparametre sağlamak yerine sadece bir komut .
Gabrielius

11

Bunu severim:

git diff --name-status <SHA1> <SHA1>^

Ben bu A& D(ekle ve sil) dosya durumları geriye alır, çünkü başka bir yol yerine, önceki taahhüt için belirtilen taahhüt fark gösterir. Olmalı git diff --name-status <SHA1>^ <SHA1>.
Troy Gizzi

11

Yalnızca son komutta dosya listesinin değiştirilmesini istiyorsanız, basit bir satır komutu kullanın:

git diff HEAD~1 --name-only

8

Bir işlemde değiştirilen dosyaları listeleyin:

git diff --name-only SHA1^ SHA1

Günlük iletileri, fazladan yeni satırlar veya başka herhangi bir karmaşa gösterilmez. Bu sadece mevcut olan için değil, herhangi bir taahhüt için geçerlidir. Neden henüz tam olarak bahsedilmediğinden emin değilim, bu yüzden ekliyorum.


Bu ikisi aynı görünüyor: git diff SHA1^ SHA1ve git show SHA1.
Vladimir Vukanac

1
@mrW Bu komutlar benzer çıktılar üretir, ancak git showaynı zamanda taahhüt mesajını da gösterir
Newtonx

8

Günlüğü görüntüleyin.

KOMİT boş olabilir ("") veya sha-1 veya sha-1 kısaltılmış olabilir.

git log COMMIT -1 --name-only

Bu sadece dosyaları listeler, daha sonraki işlemler için çok yararlıdır.

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"

8

Buna mükemmel bir cevap buldum:

git show --name-status --oneline <commit-hash>

Böylece bilebilirim

which files were just modified M

Which files were newly added , A

Which files were deleted , D

5

" git show --stat" (Teşekkürler Ryan) ve birkaç sed komutunun kombinasyonu , verileri sizin için kısaltmalıdır:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

Bu sadece değiştirilmiş dosyaların listesini üretecektir.


5

Bir dosya listesi olarak görüntülemek için basit bir hile var, sadece :karma sonra ekleyin .

git show 9d3a52c474:

Daha sonra delebilirsin,

git show 9d3a52c474:someDir/someOtherDir

Bir dosyaya vurursanız dosyanın ham sürümünü alırsınız; ki bazen sadece güzel bir referans veya anahtar kod parçaları arıyorsanız (diffs her şeyi dağınık hale getirebilir),

git show 9d3a52c474:someDir/someOtherDir/somefile

Bu yöntemin tek dezavantajı, bir dosya ağacını kolayca göstermemesidir.


3
git show HEAD@{0}

benim için iyi çalışıyor


2

Birleştirme taahhüdünde değiştirilen dosyaların listesini almak için bunu kullanıyorum

λ git log -m -1 --name-only --pretty="format:"
configs/anotherconfig.xml
configs/configsInRepo.xml

veya

λ git log -m -1 --name-status --pretty="format:"
A       configs/anotherconfig.xml
M       configs/configsInRepo.xml

2

Oh-my-zsh ve git eklentisini kullanıyorsanız, glg kısayolu yardımcı olur.


3
Sadece ... cevabýndaki tüm kodu kesdin mi? Bu hiç bahsettiğim şey değil . OP tarafından istendiği gibi sonuç çıktısında fazla bilgi yok , cevabınızda değil! Hala çok fazla yabancı bilgi veren bir cevabınız var. Ama şimdi, çok daha az doğru bir şekilde tarif ediliyor. OP bir dosya listesini çıkarmak istedi ve daha fazlası değil. Hangi glgçıktılara bakın: çok daha fazlası. Karışıklık için özür dilerim.
RomainValeri

0

Sadece dosya listesi (taahhüt mesajı bile yok):

git show --name-only --pretty=format:

Örneğin, değiştirilen tüm dosyaları düzenleyicinizde açın:

"$EDITOR" $(git show --name-only --pretty=format:)

-2

Ben benim takma adın bir özetini paylaşmak düşündüm .. Ayrıca ben her şeyi güzel git ve chroma tuşları ile komut istemi değiştirerek şube istediğiniz her zaman olduğunu söyler 'zsh' kullanarak bulabilirsiniz.

SVN'den gelenler için bunu yararlı bulacaksınız: (Bu, farklı iş parçacıklarından gelen fikirlerin bir birleşimidir, sadece kopyala / yapıştır nasıl kullanılacağını bilmekten dolayı kredi alırım)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m

-3

Bu çalışmalı:

git status

Bu neyin sahnelenmediğini ve neyin sahnelendiğini gösterecektir.


7
Buradaki soru, taahhüt edilecek olan değil, daha önce taahhüt edilmiş bir taahhütte dosyaların listesini almakla ilgilidir.
Rup
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.