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?
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.
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 danngit 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
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`
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(-)
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.
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'
Dadurch werden die Änderungen in Dateien angezeigt:
git diff --Word-diff SHA1 SHA2
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.
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
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
Basierend auf git diff --name-status
habe ich die Erweiterung git-diffview git geschrieben, die eine hierarchische Baumansicht der Änderungen zwischen zwei Pfaden darstellt.
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.
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$'