webentwicklung-frage-antwort-db.com.de

Wie listet man nur die Dateinamen auf, die sich zwischen zwei Commits geändert haben?

Ich habe ein paar Verpflichtungen im Repo. Ich möchte eine Liste von Dateien sehen, die zwischen zwei Commits geändert wurden - von SHA1 zu SHA2.

Welchen Befehl sollte ich verwenden? 

1593
Shawn
git diff --name-only SHA1 SHA2

wo Sie nur genug von SHA hinzufügen müssen, um die Commits zu identifizieren. Sie können zum Beispiel auch tun

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

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

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

ist wie --name-only, außer dass Sie ein einfaches Präfix erhalten, das Ihnen mitteilt, 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 genau mit bestimmten Dateien/Ordnern passiert ist, können Sie -- <filename> [<filename>...] an die git log-Version 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]

Dateistatusflags:
M geändert - Datei wurde geändert
C Kopieren-Bearbeiten - Datei wurde kopiert und geändert
R Umbenennen-Bearbeiten - Die Datei wurde umbenannt und geändert
Eine hinzugefügte Datei wurde hinzugefügt
D gelöscht - Datei wurde gelöscht
U unmerged - Datei hat Konflikte nach einer Zusammenführung 

365
artfulrobot

Um jedoch die Dateien zwischen Ihrem Zweig und seinem gemeinsamen Vorfahren mit einem anderen Zweig (z. B. Origin/Master) zu ändern:

git diff --name-only `git merge-base Origin/master HEAD`
44
Tim James

Es scheint, dass niemand den Schalter --stat erwähnt hat:

$ 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(-)
42
leeyuiwah

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 die Dateien als gelöscht und nicht als hinzugefügt angezeigt.

Das Hinzufügen einer grep kann die Dinge weiter verfeinern:

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

Dann werden nur Dateien angezeigt, die in myotherbranch hinzugefügt wurden.

19
Max MacLeod

Fügen Sie unten einen Alias ​​zu Ihrem ~/.bash_profile hinzu, und führen Sie dann source ~/.bash_profile aus. Wann immer Sie die aktualisierten Dateien im letzten Commit sehen möchten, führen Sie showfiles in Ihrem Git-Repository aus. 

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

Dadurch werden die Änderungen in Dateien angezeigt:

git diff --Word-diff SHA1 SHA2
7
Julio Marins

Verwenden Sie Git log --pretty = oneline> C:\Dateiname.log

dadurch wird nur ein Oneline-Protokoll (--pretty = Oneline) protokolliert. Protokolliert auch alle Details in Ihre Ausgabedatei.

3
Agni

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

3
Parris

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
2
Jaime Montoya

Basierend auf git diff --name-status habe ich die Erweiterung git-diffview git geschrieben, die eine hierarchische Baumansicht der Änderungen zwischen zwei Pfaden darstellt.

0
Bernard Opic

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 mit einer Liste von SHAs von changeSet versehen sind und über sie iterieren möchten, um zu sehen, welche Dateien geändert wurden. 

Dies ähnelt einigen der obigen Antworten, aber durch Verwendung von tformat: anstelle von format: wird das Trennzeichen zwischen den Commits entfernt.

0
blindsnowmobile

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$'
0
K. Symbol