Yalnızca iki işlem arasında değişen dosya adları nasıl listelenir?


Yanıtlar:


2662
git diff --name-only SHA1 SHA2

sadece taahhütleri tanımlamak için yeterli SHA'yı dahil etmeniz gerekir. Örneğin şunları da yapabilirsiniz

git diff --name-only HEAD~10 HEAD~5

onuncu en son taahhüt ile beşinci en son (ya da böyle) arasındaki farkları görmek için.


151
Bu git gösterisi için de geçerlidir. git show --name-only SHA1.
Ağustos Lilleaas

78
git diff --name-status [TAG|SHA1]dosyalara da hangi işlemlerin yapıldığını gösterir
reconbot

2
şunları da yapabilirsiniz: git diff - yalnızca ad HEAD @ {3} HEAD @ {0} ile karşılaştırmak istediğiniz kesin taahhütler.
b01

7
@AugustLilleaas aslında show kullanarak sadece 2 belirli taahhüt gösterecek, eğer bu 2 arasında taahhüt varsa dışarıda kalacak
chrisan

4
Aşağıda belirtildiği gibi, git diff --name-statuseklenmiş dosyaları göstermek istemiyor gibi görünüyor. @sschuberth işaret git showbenim için düzgün çalışması gibi görünüyor, hangi: git show --pretty=format: --name-status. Sadece yapmak git show --name-statusbiraz daha fazla bilgi verir, ama yine de güzel ve yoğun ... bu benim yeni goto
komutum

417
git diff --name-status [SHA1 [SHA2]]

dosyaya ne olduğunu (basitçe değiştirilmiş, silinmiş, eklenmiş ...) anlatan basit bir önek elde etmeniz dışında - sadece ad gibi

git log --name-status --oneline [SHA1..SHA2]

benzerdir, ancak taahhütler yürütme mesajından sonra listelenir, böylece bir dosyanın ne zaman değiştirildiğini görebilirsiniz.

  • Belirli dosyalara tam ne ilgileniyorsanız / klasörleri ekleyebilirsiniz -- <filename> [<filename>...]etmek git logsürümü.

  • tek bir işlem için ne olduğunu görmek istiyorsanız, SHA1 olarak adlandırın, sonra yapın
    git log --name-status --oneline [SHA1^..SHA1]

Dosya durumu bayrakları:
M değiştirildi - Dosya değiştirildi
C copy-edit - Dosya kopyalandı ve değiştirildi
R rename-edit - Dosya yeniden adlandırıldı ve değiştirildi
A eklendi - Dosya eklendi
D silindi - Dosya silindi
U unmerged - Birleştirme işleminden sonra dosya çakışıyor


Git diff --name-status diyorum ve 'eklenen dosya' verdi.
aartist

1
Git günlüğü için SHA'lar arasında SHA1..SHA2 gibi iki nokta olması gerekir ve ikinci SHA isteğe bağlı değildir, bu yüzden şöyle görünmelidir: git log --name-status --oneline [SHA1 .. SHA2]
twasbrillig

Belirli dosyaları / belirli dosya türlerini hariç tutmanın bir yolu var mı?
ağustos

3
--relative[=<path>]Seçenek Emin değilim, size yardımcı olabilir. Aksi takdirde her zaman vardır | erep -v '(.tmp|.foo|.dontwant)$'...
artfulrobot

80

Görünüşe göre hiç kimse bu geçişten bahsetmedi --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

Ayrıca orada --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

ve --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

4
Kabul edilen cevap doğrudur, ancak bu çok faydalıdır ve size biraz fazla bilgi verir. Teşekkürler!
kontur

2
Fark istatistiklerini içerdiğinden, bu daha yararlı bir cevaptır.
internetross

52

Ancak, şubenizle ortak atası arasında başka bir şubeyle değiştirilen dosyaları görmek için (orijin / master):

git diff --name-only `git merge-base origin/master HEAD`

1
Bu gerçekten işe yaradı! Keşke basitçe söyleyebilsem git diffstatus masterya da benzer bir şey, keşke yukarıdakileri tetikler.
oma

3
Veya git show --pretty=format: --name-only origin/master...
sschuberth

Bir git takma adı yapamayabilirsiniz, ancak kesinlikle .bashrc'nize koyabilirsiniz.
Fred

3
Ya da daha da basit: git diff --name-only HEAD...master(üç noktayı not edin). Ayrıntılı bir açıklama için buraya bakın .
ostrokach

1
Çoğunlukla doğru cevap gibi görünüyor! Simple git diff --name-only master..branch, github PR listesine karşılık gelmez. Bu şekilde daha kesin. Ama yine de github PR 173 dosyaları vs 171 değişti var. ( merge-base228 vs 171 olmadan )
x'ES

21

İki dal arasında değiştirilmiş dosyaları göstermek istiyorsanız @ artfulrobot'un cevabını desteklemek için:

git diff --name-status mybranch..myotherbranch

Önceliğe dikkat edin. Önce daha yeni bir dal yerleştirirseniz, dosyalar eklenenlerden ziyade silinmiş olarak gösterilir.

Bir grepkutu eklemek , işleri daha da hassaslaştırabilir:

git diff --name-status mybranch..myotherbranch | grep "A\t"

Bu yalnızca eklenmiş dosyaları gösterir myotherbranch.


4
Regexes güzel bir kutu gerçekten neredeyse her şeyi yapabilir. Bu durumda, yine de --diff-filter, bu işlevselliği yerel olarak veren, bu da yanlış sonuçların daha az şansı olduğu anlamına gelir (örneğin, yanlış pozitifler)
Jasper

8

Aşağıdaki takma adı ekleyin ~/.bash_profileve çalıştırın source ~/.bash_profile; şimdi her zaman güncellenen dosyaları görmek için son taahhüt, çalıştırmak, showfilesgit deponuzdan.

alias showfiles='git show --pretty="format:" --name-only'

2
Veya git config --global alias.showfiles 'show --pretty="format:" --name-only'yapmak için git showfiles.
cgmb

7

Bu, dosyalardaki değişiklikleri gösterecektir:

git diff --word-diff SHA1 SHA2

5

Ayrıca, yalnızca son işleme ve ondan önceki dosyaya kadar değişen dosyaları görmek istiyorsanız unutmayın. Bu iyi çalışıyor:git show --name-only


3

Git log --pretty = oneline> C: \ dosyaadı.log dosyasını kullanın

değiştirilen dosyanın adı için yalnızca bir oneline (--pretty = oneline) kaydeder. Ayrıca tüm ayrıntıları çıktı dosyanıza kaydeder.


git log --pretty=onelinebana sadece
SHA'yı

3

Artfulrobot'un cevabında söylediği gibi:

git diff --name-status [SHA1 [SHA2]]

Örneğim:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png

3

Sadece Java dosyalarına odaklanması gereken biri için bu benim çözümüm:

 git diff --name-status SHA1 SHA2 | grep '\.java$'

1

Aşağıdakiler benim için iyi çalışıyor:

$ git show --name-only --format=tformat: SHA1..SHA2

Tek bir işlemle de kullanılabilir:

git show --name-only --format=tformat: SHA1

sizlere bir ChangeSet SHA's Listesi sağlanmış ve hangi dosyaların değiştirildiğini görmek için bunları yinelemek isteyen Jenkins'te kullanışlıdır.

Bu, yukarıdaki cevapları bir çift benzer, ancak kullanarak tformat:yerine format:uzaklaşmaların kaydedilmesini arasındaki ayırıcı boşluk.


0

Dayanarak git diff --name-statusI yazdım git-diffview iki yol arasında değiştiğini şeyin hiyerarşik ağaç görünümünü vermektedir git uzantısı.

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.