Wie liste ich nur die Dateinamen auf, die sich zwischen zwei Commits geändert haben?


Antworten:


2663
git diff --name-only SHA1 SHA2

Hier müssen Sie nur genügend SHA hinzufügen, um die Commits zu identifizieren. Sie können dies beispielsweise auch tun

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

um die Unterschiede zwischen dem zehnten letzten Commit und dem fünften letzten Commit (oder so) zu sehen.


151
Dies funktioniert auch für Git-Shows. git show --name-only SHA1.
August Lilleaas

78
git diff --name-status [TAG|SHA1]zeigt, welche Operationen auch an den Dateien durchgeführt wurden
Reconbot

2
Sie können auch Folgendes tun: git diff - only-name HEAD @ {3} HEAD @ {0} für die genauen Commits, die Sie vergleichen möchten.
B01

7
@AugustLilleaas, das tatsächlich show verwendet, zeigt nur die 2 spezifischen Commits an. Wenn Sie Commits zwischen diesen 2 haben, werden sie
weggelassen

4
Wie unten erwähnt, git diff --name-statusscheint es nicht möglich zu sein, hinzugefügte Dateien anzuzeigen. @sschuberth wies darauf hin git show, was für mich richtig zu funktionieren scheint : git show --pretty=format: --name-status. Nur zu tun git show --name-statusgibt ein bisschen mehr Informationen, aber immer noch schön und dicht ... das wird mein neuer goto-Befehl sein;)
travc

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

ist wie --name-only, außer dass Sie ein einfaches Präfix erhalten, das Ihnen sagt, was mit der Datei passiert ist (geändert, gelöscht, hinzugefügt ...)

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

ist ähnlich, aber Commits werden nach der Commit-Nachricht aufgelistet, sodass Sie sehen können, wann eine Datei geändert wurde.

  • Wenn Sie daran interessiert sind, was mit bestimmten Dateien / Ordnern passiert ist, können Sie -- <filename> [<filename>...]die git logVersion anhängen .

  • Wenn Sie sehen möchten, was bei einem einzelnen Commit passiert ist, nennen Sie es SHA1 und dann
    git log --name-status --oneline [SHA1^..SHA1]

Dateistatus-Flags:
M geändert - Datei wurde geändert
C Kopieren-Bearbeiten - Datei wurde kopiert und geändert
R Umbenennen-Bearbeiten - Datei wurde umbenannt und geändert
A hinzugefügt - Datei wurde hinzugefügt
D gelöscht - Datei wurde gelöscht
U nicht zusammengeführt - Datei hat Konflikte nach einer Zusammenführung


Ich sage zufällig git diff --name-status und es gab die 'hinzugefügte Datei'.
Aartist

1
Für das Git-Protokoll müssen zwei Punkte zwischen den SHAs vorhanden sein, z. B. SHA1..SHA2, und das zweite SHA ist nicht optional. Daher sollte es folgendermaßen aussehen: Git-Protokoll --name-status --oneline [SHA1 .. SHA2]
Twasbrillig

Gibt es eine Möglichkeit, bestimmte Dateien / bestimmte Dateitypen auszuschließen?
aug

3
Die --relative[=<path>]Option kann Ihnen helfen, ich bin mir nicht sicher. Ansonsten gibt es immer | erep -v '(.tmp|.foo|.dontwant)$'...
Artfulrobot

80

Es scheint, dass niemand den Schalter erwähnt hat --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(-)

Es gibt auch --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

und --shortstat

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

4
Die akzeptierte Antwort ist korrekt, aber dies ist sehr nützlich und gibt Ihnen ein paar zusätzliche Informationen. Vielen Dank!
Kontur

2
Einverstanden ist dies eine nützlichere Antwort, da sie die Diff-Statistiken enthält.
Internetross

52

Aber um zu sehen, wie sich die Dateien zwischen Ihrem Zweig und seinem gemeinsamen Vorfahren mit einem anderen Zweig (z. B. Ursprung / Master) geändert haben:

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

1
Das war wirklich nützlich! Ich wünschte, ich könnte einfach sagen git diffstatus masteroder ähnliches, das löst das Obige aus.
Oma

3
Oder git show --pretty=format: --name-only origin/master...
Sschuberth

Möglicherweise können Sie es nicht zu einem Git-Alias ​​machen, aber Sie können es definitiv in Ihre .bashrc-Datei einfügen.
Fred

3
Oder noch einfacher: git diff --name-only HEAD...master(beachten Sie die drei Punkte). Eine ausführliche Erklärung finden Sie hier .
Ostrokach

1
Sieht nach meist richtiger Antwort aus! Einfach git diff --name-only master..branchentspricht nicht der PR-Liste von Github. Auf diese Weise genauer. Aber trotzdem habe ich 173 geänderte Dateien vs 171 in Github PR. (ohne merge-baseich habe 228 vs 171)
x'ES

21

Um die Antwort von @ artfulrobot zu ergänzen, wenn Sie geänderte Dateien zwischen zwei Zweigen anzeigen möchten:

git diff --name-status mybranch..myotherbranch

Seien Sie vorsichtig bei der Rangfolge. Wenn Sie den neueren Zweig zuerst platzieren, werden Dateien als gelöscht und nicht als angezeigt angezeigt.

Das Hinzufügen einer grepDose verfeinert die Dinge weiter:

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

Daraufhin werden nur die hinzugefügten Dateien angezeigt myotherbranch.


4
Regexes sind nett und können in der Tat fast alles. In diesem Fall gibt es jedoch auch --diff-filtereine Funktion, die diese Funktionalität nativ bietet, was eine geringere Wahrscheinlichkeit für falsche Ergebnisse (z. B. falsch positive Ergebnisse) bedeutet
Jasper,

8

Fügen Sie den folgenden Alias ​​zu Ihrem hinzu ~/.bash_profileund führen Sie ihn aus source ~/.bash_profile. Jetzt können Sie jederzeit die aktualisierten Dateien im letzten Commit anzeigen, das showfilesvon Ihrem Git-Repository ausgeführt wird.

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

2
Oder git config --global alias.showfiles 'show --pretty="format:" --name-only'zu machen git showfiles.
CGMB


5

Beachten Sie auch, wenn Sie nur die geänderten Dateien zwischen dem letzten und dem vorherigen Commit anzeigen möchten. Das funktioniert gut:git show --name-only


3

Verwenden Sie git log --pretty = oneline> C: \ filename.log

Dadurch wird nur eine Online-Datei (--pretty = oneline) protokolliert, die den Namen der geänderten Datei enthält. Außerdem werden alle Details in Ihrer Ausgabedatei protokolliert.


git log --pretty=onelinegibt mir nur die SHA und die Commit-Nachricht mit Git 2.10.1
verdammt

3

Wie Artfulrobot in seiner Antwort sagte:

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

Mein Beispiel:

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

3

Nur für jemanden, der sich nur auf Java-Dateien konzentrieren muss, ist dies meine Lösung:

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

1

Folgendes funktioniert gut für mich:

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

Es kann auch mit einem einzigen Commit verwendet werden:

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

Dies ist praktisch für die Verwendung in Jenkins, wo Sie eine Liste der changeSet-SHAs erhalten und diese durchlaufen möchten, um festzustellen, welche Dateien geändert wurden.

Dies ähnelt einigen der obigen Antworten, verwendet jedoch den Trennraum zwischen den Commits , tformat:anstatt ihn zu format:entfernen.


0

Basierend auf habe git diff --name-statusich die Git-Diffview- Git-Erweiterung geschrieben, die eine hierarchische Baumansicht der Änderungen zwischen zwei Pfaden darstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.