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).
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).
Antworten:
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 logwith, --name-onlyum alle Dateien jedes Commits zwischen den angegebenen aufzulisten. --pretty=onelineDer Teil über der Dateiliste besteht nur aus dem Commit-SHA und dem Nachrichtentitel. --full-indexmacht die SHA die vollen 40 Zeichen. grepfiltert 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 :
Wenn Sie nicht den gesamten Patch sehen möchten, können Sie die Option '--stat' hinzufügen, mit der die Ausgabe auf die geänderten Dateien beschränkt wird. Außerdem wird ein kleines Textdiagramm angezeigt, in dem angegeben ist, wie viele Zeilen sich in jeder Datei geändert haben.
git diff --stat <commit1> <commit2>.
git diff --stat HEAD^^ HEAD, erhalten Sie eine leere Ausgabe.
git diff --name-onlyist wahrscheinlich besser als, git diff --stataber wie bereits erwähnt, macht git diffes nicht das, was das OP wollte.
Wenn Sie nur die Dateinamen sehen möchten, nach denen das Commit bchronologisch folgt a:
git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time
Wenn Sie alle Dateinamen und die Änderungen von Commit a in Commit b anzeigen möchten, löschen Sie das letzte Argument.
git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file
Ein Beispiel dafür <commit sha1>sind die Commit-IDs 675ee6860d2c273bcc6c6a0536634a107e2a3d9f. 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 von git 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.
Dieser ähnelt dem von igorw , vermeidet jedoch das Entfernen des SHA über grep:
git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u
Wenn Sie zusätzlich sehen möchten, wie die Dateien geändert wurden, ersetzen Sie --name-onlydurch --name-status.
"$@"? 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-showfilesSkript 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:
git log 12345678..87654321 > C:\GitChanges.txt
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.