1121 Stimmen

Wie kann man alle Commits auflisten, die eine bestimmte Datei geändert haben?

Gibt es eine Möglichkeit, alle Commits aufzulisten, die eine bestimmte Datei geändert haben?

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.

1461voto

jackrabb1t Punkte 13611

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 ).

5 Stimmen

Dies ist besser, denn es scheint die Übertragungen, die die Datei betreffen, für alle Übertragungen aufzulisten, im Gegensatz zu "git log <somepath>".

49 Stimmen

+1 --follow berücksichtigt Umbenennungen, ist also robuster als git log -- path

61 Stimmen

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).

158voto

BigMiner Punkte 1483

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

18 Stimmen

Dies ist ideal für den Fall, dass jemand Änderungen vornimmt, aber vergisst, wo er die Änderungen gespeichert hat.

4 Stimmen

Sehr nützlich. Enthält auch Stash-Commits

1 Stimmen

Dies sollte die bevorzugte Antwort sein. Die Frage war, alle Commits zu finden, diese tut es.

130voto

Gabe Moothart Punkte 30087

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.

15 Stimmen

Funktioniert nicht, wenn sich der Pfad der Datei geändert hat. Die Antwort von jackrabbit funktioniert in diesem Fall.

1 Stimmen

Dies funktioniert, wenn Sie das Protokoll auf einen bestimmten Zweig beschränken müssen

52voto

Sankar Subburaj Punkte 4792

Verwenden Sie den folgenden Befehl, um Commits für eine bestimmte Datei zu erhalten:

git log -p filename

9 Stimmen

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.

3 Stimmen

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.

1 Stimmen

Aus irgendeinem Grund die log --follow Die obigen Lösungen gaben mir falsche Informationen (mehr Übertragungen als nötig). Diese Lösung git log -p filename die richtigen Informationen gegeben hat.

42voto

rfunduk Punkte 29395

Es sollte so einfach sein wie git log <somepath> ; lesen Sie die Manpage ( git-log(1) ).

Ich persönlich verwende gerne git log --stat <path> damit ich die Auswirkungen jeder Übertragung auf die Datei sehen kann.

13 Stimmen

Oder sogar -p wenn Sie den vollständigen Unterschied sehen wollen, nicht nur, dass eine bestimmte Anzahl von Zeilen geändert wurde.

0 Stimmen

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.

0 Stimmen

Git log --stat --follow -- *.html => Ausgabe einer Liste von Commits mit genau einer Datei in jedem Commit. Sehr schön!

CodeJaeger.com

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.

Powered by:

X