Ein Riff auf Git: Alle geänderten Dateien zwischen zwei Commits anzeigen : Ich möchte eine Liste aller Dateien, die zwischen zwei Commits geändert wurden, auch wenn sie jetzt gleich sind (dh geändert und dann wieder geändert).
74
Ein Riff auf Git: Alle geänderten Dateien zwischen zwei Commits anzeigen : Ich möchte eine Liste aller Dateien, die zwischen zwei Commits geändert wurden, auch wenn sie jetzt gleich sind (dh geändert und dann wieder geändert).
Dies ist das Beste, was ich mir vorstellen kann:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
Ersetzen Sie HEAD ^^ und HEAD durch die Commits, die Sie vergleichen möchten.
Mein Versuch verwendet git log
with, --name-only
um alle Dateien jedes Commits zwischen den angegebenen aufzulisten. --pretty=oneline
Der Teil über der Dateiliste besteht nur aus dem Commit-SHA und dem Nachrichtentitel. --full-index
macht die SHA die vollen 40 Zeichen. grep
filtert alles heraus, was wie ein SHA aussieht, gefolgt von einem Leerzeichen. Sofern Sie keine Dateien haben, die mit einem SHA gefolgt von einem Leerzeichen beginnen, sollte das Ergebnis korrekt sein.
Ich denke, dieser Befehl ist Ihre Antwort:
git diff --stat abc123 xyz123 # where abc123 and xyz123 are SHA1 hashes of commit objects
Direkt aus dem Git-Community-Buch :
quelle
git diff --stat <commit1> <commit2>
.git diff --stat HEAD^^ HEAD
, erhalten Sie eine leere Ausgabe.git diff --name-only
ist wahrscheinlich besser als,git diff --stat
aber wie bereits erwähnt, machtgit diff
es nicht das, was das OP wollte.Wenn Sie nur die Dateinamen sehen möchten, nach denen das Commit
b
chronologisch folgta
:Wenn Sie alle Dateinamen und die Änderungen von Commit a in Commit b anzeigen möchten, löschen Sie das letzte Argument.
Ein Beispiel dafür
<commit sha1>
sind die Commit-IDs675ee6860d2c273bcc6c6a0536634a107e2a3d9f
. Im Allgemeinen funktionieren die ersten 8 bis 10 Ziffern bei den meisten Projekten, benötigen jedoch möglicherweise mehr, wenn das Projekt unzählige Commits enthält. Normalerweise verwende ich die Ausgabe der ID vongit log --oneline
.Wenn Sie einen Unterschied zwischen a ... b und b später als a feststellen, ist es leicht zu erkennen, was in jeder Datei chronologisch geändert wurde.
quelle
Dieser ähnelt dem von igorw , vermeidet jedoch das Entfernen des SHA über
grep
:Wenn Sie zusätzlich sehen möchten, wie die Dateien geändert wurden, ersetzen Sie
--name-only
durch--name-status
.quelle
"$@"
? Andernfalls werden vorhandene Änderungen angezeigt, was sehr viel ist :-) Ich habe meine Antwort überarbeitet, um ein Beispiel zu verwenden, wie in den anderen Antworten.git-showfiles
Skript und"$@"
fügt alle übergebenen Argumente ein. Obwohl ein bisschen dunkel (wie viel in Shell-Skripten), ist dies ziemlich normales Zeug.Ich würde verwenden; Nehmen Sie die ersten 8 des Commit-Hash. Wenn Sie möchten, können Sie wie folgt in eine Datei leiten:
quelle
Ich benutze diesen Befehl, um alle Änderungen zwischen zwei Commits zu vergleichen:
git difftool -d <commit hash1> <commit hash2>
Wie eine Git-Rebase, um alle lokalen Commits in einem zu zerquetschen.
quelle