Ich suche nach einem einfachen git
Befehl, der eine gut formatierte Liste aller Dateien enthält, die Teil des durch einen Hash (SHA1) angegebenen Commits waren, ohne fremde Informationen.
Ich habe versucht:
git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d
Obwohl es die Dateien auflistet, enthält es auch unerwünschte Diff-Informationen für jede.
Gibt es einen anderen git
Befehl, der nur die gewünschte Liste bereitstellt, damit ich sie nicht aus der git show
Ausgabe analysieren kann ?
git log --until 2013-05-21 --pretty="short" --name-only
mit einem guten Effekt abgeschlossen werden.n
Commits zu erhalten, bismaster
:git diff-tree --name-status -r @{3} master
git diff --name-only master
- Um ALLE geänderten Dateien im aktuellen Zweig aufzulisten, im Vergleich zum Hauptzweig.Antworten:
Bevorzugter Weg (weil es sich um einen Installationsbefehl handelt ; programmatisch):
Ein anderer Weg (weniger bevorzugt für Skripte, da es sich um einen Porzellanbefehl handelt ; er soll dem Benutzer zugewandt sein)
--no-commit-id
unterdrückt die Ausgabe der Commit-ID.--pretty
Argument gibt eine leere Formatzeichenfolge an, um die Kruft am Anfang zu vermeiden.--name-only
Argument zeigt nur die betroffenen Dateinamen (Danke Hank). Verwenden Sie--name-status
stattdessen, wenn Sie sehen möchten, was mit jeder Datei passiert ist ( D eleted, M odified, A dded).-r
Argument ist, in Unterbäume zurückzukehrenquelle
diff-tree
dies beim Betrachten des Root-Commits nicht funktioniert.--name-only
Option durch ersetzen--name-status
, erhalten Sie eine klarere Zusammenfassung.git log --name-only -n 1 <hash>
Das letzte Commit wäre:git log --name-only -n 1 HEAD~1..HEAD
git show
ist "Porzellan" (soll dem Benutzer zugewandt sein) undgit diff-tree
ist "Sanitär" (soll programmgesteuert verwendet werden, z. B. aus Skripten). Die Schnittstelle für die ehemaligen kann im Laufe der Zeit ändern (so die git Maintainer fallen können ,--name-only
obwohl ich mich nicht vorstellen , sie würden ) für useability Gründe, während die Schnittstelle für die letztere wird so stabil wie möglich aus Kompatibilitätsgründen beibehalten werden.Wenn Sie eine Liste der geänderten Dateien erhalten möchten:
Wenn Sie eine Liste aller Dateien in einem Commit erhalten möchten, können Sie verwenden
quelle
git ls-tree --name-only HEAD
(Der Parameter <commit-ish> ist erforderlich ; in diesem Beispiel ist es HEAD) funktioniert für mich mit der Git-Version 1.6.4.3--no-commit-id
, um das Drucken des SHA1 zu vermeiden, wie folgt:git diff-tree --no-commit-id --name-only -r <commit-ish>
-r
/-t
option nicht verpasst , oder? Weil diff-tree sowohl geänderte als auch hinzugefügte Dateien verarbeitet. Wenn Sie alle neuen (hinzugefügten) Dateiengit diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish>
Ich gehe einfach davon aus, dass dies
gitk
nicht erwünscht ist. Versuchen Sie es in diesem Fallgit show --name-only <sha>
.quelle
--name-status
.gitk
ist dies eine gute Möglichkeit, die Dateien zu überprüfen und die Datei anzuzeigen, in der sich der Diff befindet. zB Code, der ein Monster-Commit von einem Peer überprüft.Ich persönlich verwende die Kombination von --stat und --oneline mit dem Befehl show :
Wenn Sie die Statistiken zum Hinzufügen / Entfernen nicht mögen / möchten, können Sie --stat durch --name-only ersetzen
quelle
alias gits='git show --stat --oneline'
zeigt danngits
selbst die neuesten Änderungen (in HEAD) an, währendgits b24f5fb
die Änderungen einer Revision angezeigt werden können.git config --global alias.changes 'show --stat --oneline'
. Dann können Siegit changes
(mit einem optionalen Commit-ish) eingeben und die Ausgabe aus den ersten Beispielen oben erhalten.git config --global alias.changes "show --stat --oneline"
git show
funktioniert auch die Überprüfung von versteckten Änderungen: zBgit show --stat --oneline stash@{1}
Sie können auch tun
Sie können verschiedene Commits, Commit-Nachrichten und die geänderten Dateien durchsuchen.
Geben Sie q ein, um Ihre Eingabeaufforderung zurückzugewinnen.
quelle
git show 5944ad2a8b5 --name-only
dieseVor kurzem musste ich alle geänderten Dateien zwischen zwei Commits auflisten. Also habe ich diesen (auch * nix-spezifischen) Befehl verwendet
Update : Oder wie Ethan unten betont
Die Verwendung umfasst
--name-status
auch die Änderung (hinzugefügt, geändert, gelöscht usw.) neben jeder Dateiquelle
git diff --name-status START_COMMIT..END_COMMIT
brauchen Sie das Trailing nicht|sort | uniq
.git diff --name-only START_COMMIT..END_COMMIT
git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'
. Ich wollte eine Liste mit Codeänderungen nur für eine große PR, die Tausende von PNGs und XML-Layouts hinzugefügt hatte.Einfachste Form:
git show --stat (hash)
Das ist leichter zu merken und gibt Ihnen alle Informationen, die Sie brauchen.
Wenn Sie wirklich nur die Namen der Dateien möchten, können Sie die
--name-only
Option hinzufügen .git show --stat --name-only (hash)
quelle
Ich benutze ziemlich oft geänderten Alias. So richten Sie es ein:
dann:
Ähnliche Befehle, die nützlich sein können:
quelle
Verwenden
Dies zeigt Ihnen die Commit-ID, die Nachricht, die geänderten Dateien und ob sie geändert, erstellt, hinzugefügt oder gelöscht wurden. Etwas wie ein All-in-One-Befehl.
quelle
Verwenden des Standardbefehls git diff (auch für Skripte geeignet):
Wenn Sie auch den Status der geänderten Dateien wünschen:
Dies funktioniert gut mit Merge-Commits.
quelle
Versuchen Sie diesen Befehl für den Namen und ändert die Zeilennummer
Nur Dateinamen anzeigen
Versuchen Sie diesen Befehl, um den letzten Commit-Hash zu erhalten
Letzte Festschreibung mit Dateinamen anzeigen und Dateistatus ändern, erstellen oder löschen
oder für alle
Weitere Informationen zum Git-Protokoll finden Sie in diesem Artikel
https://devhints.io/git-log-format
https://devhints.io/git-log
quelle
quelle
OK, es gibt verschiedene Möglichkeiten, alle Dateien in einem bestimmten Commit anzuzeigen ...
Um die Informationen zu reduzieren und nur die Namen der Dateien anzuzeigen, die festgeschrieben wurden, können Sie einfach hinzufügen
--name-only
oder--name-status
kennzeichnen ... Diese Flags zeigen Ihnen nur die Dateinamen, die sich von den vorherigen Festschreibungen unterscheiden, wie Sie möchten ...So können Sie
git diff
von gefolgt--name-only
, mit zwei Hashes begehen nach<sha0> <sha1>
, so etwas wie unten:Ich erstelle auch das folgende Bild, um alle Schritte zu zeigen, die in dieser Situation ausgeführt werden müssen:
quelle
Ich benutze dies, um eine Liste der geänderten Dateien zwischen zwei Änderungssätzen zu erhalten:
quelle
git diff --name-status .. | grep ^[^D] | cut -f2
Ich benutze gerne
quelle
Es gibt auch
git whatchanged
, was niedriger ist alsgit log
Es gibt die Festschreibungszusammenfassung mit einer Liste von Dateien mit ihren Modi darunter aus und falls vorhanden (
A
), gelöscht (D
) oder geändert (M
);Würde so etwas geben wie:
Ich weiß, dass diese Antwort nicht wirklich mit "ohne fremde Informationen" übereinstimmt, aber ich denke immer noch, dass diese Liste nützlicher ist als nur die Dateinamen.
quelle
whatchanged
anstatt Parameter anzugeben.Ich mag das:
quelle
A
&D
(Hinzufügen und Löschen) -Datei rückwärts, da der Unterschied vom angegebenen Commit zum vorherigen Commit angezeigt wird und nicht umgekehrt. Es sollte seingit diff --name-status <SHA1>^ <SHA1>
.Verwenden Sie einen einfachen einzeiligen Befehl, wenn Sie nur möchten, dass die Liste der Dateien beim letzten Festschreiben geändert wird:
quelle
Listen Sie die Dateien auf, die sich in einem Commit geändert haben:
Dies zeigt keine Protokollnachrichten, zusätzlichen Zeilenumbrüche oder andere Unordnung an. Dies funktioniert für jedes Commit, nicht nur für das aktuelle. Ich bin mir nicht sicher, warum es noch nicht ganz erwähnt wurde, also füge ich es hinzu.
quelle
git diff SHA1^ SHA1
undgit show SHA1
.git show
auch dieZeigen Sie das Protokoll an.
COMMIT kann leer ("") oder sha-1 oder sha-1 verkürzt sein.
Dadurch werden nur die Dateien aufgelistet, die für die weitere Verarbeitung sehr nützlich sind.
quelle
Eine perfekte Antwort darauf gefunden:
Damit ich es wissen kann
quelle
Eine Kombination aus "
git show --stat
" (danke Ryan) und ein paar sed-Befehlen sollte die Daten für Sie reduzieren:Dadurch wird nur die Liste der geänderten Dateien erstellt.
quelle
Es gibt einen einfachen Trick, den Sie als Dateiliste anzeigen können. Fügen Sie ihn einfach
:
nach dem Hash hinzu.Sie können dann bohren,
Wenn Sie auf eine Datei klicken, erhalten Sie die Rohversion der Datei. Das ist manchmal das, was Sie wollen, wenn Sie nur nach einer netten Referenz oder wichtigen Codeteilen suchen (Unterschiede können alles durcheinander bringen).
Der einzige Nachteil dieser Methode ist, dass ein Dateibaum nicht einfach angezeigt wird.
quelle
funktioniert gut für mich
quelle
Ich benutze dies, um eine Liste der geänderten Dateien in Merge Commit zu erhalten
oder
quelle
Wenn Sie das Plugin oh-my-zsh und git verwenden, ist die Verknüpfung glg hilfreich.
quelle
glg
ausgegeben wird: viel mehr. Entschuldigung für die Verwirrung.Nur die Dateiliste (nicht einmal Commit-Nachricht):
Öffnen Sie beispielsweise alle geänderten Dateien in Ihrem Editor:
quelle
Ich dachte, ich würde eine Zusammenfassung meines Alias teilen. Außerdem finde ich die Verwendung von 'zsh' großartig mit Git It Chroma Keys.
Für diejenigen, die von SVN berichten, ist dies nützlich: (Dies ist eine Kombination von Ideen aus verschiedenen Threads. Ich kann nur wissen, wie man Kopieren / Einfügen verwendet.)
quelle
Das sollte funktionieren:
Dies zeigt, was nicht inszeniert ist und was inszeniert wird.
quelle