Gibt es eine Möglichkeit, alle Commits aufzulisten, die eine bestimmte Datei geändert haben?
Dies ist besser, denn es scheint die Übertragungen, die die Datei betreffen, für alle Übertragungen aufzulisten, im Gegensatz zu "git log <somepath>".
Gibt es eine Möglichkeit, alle Commits aufzulisten, die eine bestimmte Datei geändert haben?
El --follow
funktioniert für eine bestimmte Datei
git log --follow -- filename
Unterschied zu anderen gegebenen Lösungen
Beachten Sie, dass es auch andere Lösungen gibt git log path
(ohne den --follow
). Dieser Ansatz ist praktisch, wenn Sie z.B. Änderungen in einem System verfolgen wollen. Verzeichnis aber stolpert, wenn Dateien umbenannt wurden (daher verwenden --follow filename
).
Dies ist besser, denn es scheint die Übertragungen, die die Datei betreffen, für alle Übertragungen aufzulisten, im Gegensatz zu "git log <somepath>".
Beachten Sie, dass --follow
akzeptiert eine Pfad , die eine Datei, aber auch ein Verzeichnis sein kann. Im letzteren Fall wird es rekursiv ausgeführt und meldet Änderungen an allen Dateien unterhalb dieses Punktes. (Dieses Verhalten ist in der Manpage nicht dokumentiert und ist möglicherweise nicht dauerhaft).
Ich habe mir das genau angesehen, und all diese Antworten scheinen mir nicht wirklich alle Übertragungen über alle Zweige hinweg zu zeigen.
Hier ist, was ich durch Herumspielen mit der gitk Ansichtsoptionen bearbeiten. Dies zeigt mir alle Übertragungen für eine Datei unabhängig von Verzweigung, lokal, reflog und remote.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
Es funktioniert auch mit git log
:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
Dies ist ideal für den Fall, dass jemand Änderungen vornimmt, aber vergisst, wo er die Änderungen gespeichert hat.
Dies sollte die bevorzugte Antwort sein. Die Frage war, alle Commits zu finden, diese tut es.
git log path
sollte das tun, was Sie wollen. Von der git log
Manpage :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Ich verstehe, dass dies nicht genau die Frage beantwortet, da er eine Liste der Übertragungen wollte, aber das ist Gold wert und kommt in meine Datei.
Dies wird nicht funktionieren, wenn die Datei nicht in dem aktuell ausgecheckten Zweig existiert. Sie können den Zweig wie folgt hinzufügen git log -p mybranch -- filename
oder verwenden Sie einfach git log --all -- filename
in allen Branchen zu suchen.
Oder sogar -p
wenn Sie den vollständigen Unterschied sehen wollen, nicht nur, dass eine bestimmte Anzahl von Zeilen geändert wurde.
Stimmt, aber das ist ziemlich laut, wenn man bedenkt, dass die meisten Dateien im Laufe ihres Lebens viele Male geändert wurden. Ich möchte keine vollständigen Diffs von jedem einzelnen Commit sehen, der eine Datei jemals berührt hat. Normalerweise suche ich nach einer bestimmten Sache, so dass ich ein Protokoll mit nur Auswirkungen erhalten kann und dann git show
auf die spezifischen Commits, die von Bedeutung zu sein scheinen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
3 Stimmen
Suchen Sie nach Änderungen an einer Datei in einer einzelnen Verzweigung, in allen lokalen Verzweigungen, in allen Verzweigungen auf einer einzigen entfernten Verzweigung oder in allen? Ich denke, für alle ist ein Skript erforderlich.