Suchen Sie nach Änderungen an einer Datei in einem einzelnen Zweig? über alle lokalen Niederlassungen hinweg; über alle Zweige auf einer einzigen Fernbedienung; oder über alles? Ich denke, dass für alles ein Skript erforderlich ist.
benhorgen
Antworten:
1082
Das --followfunktioniert für eine bestimmte Datei
git log --follow -- filename
Unterschied zu anderen Lösungen gegeben
Beachten Sie, dass andere Lösungen git log path(ohne --follow) enthalten. Dieser Ansatz ist praktisch, wenn Sie z. B. Änderungen in einem Verzeichnis verfolgen möchten , aber beim Umbenennen von Dateien stolpern (also verwenden --follow filename).
+1 --followKonten für Umbenennungen, so ist dies robuster alsgit log -- path
Gabe Moothart
42
Beachten Sie, dass --followein Pfad akzeptiert wird , der 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 nicht in der Manpage dokumentiert und möglicherweise nicht dauerhaft.)
StvnW
5
Was ist der Unterschied zwischen diesem und nurgit log filename?
VaTo
8
@SaulOrtega git log filenamefolgt nicht dem Umbenennen von Dateien, dh es werden alle Commits in Bezug auf diesen Dateinamen angezeigt (nicht die tatsächliche Datei). Wenn Sie Dateien erstellen Xund Yänderte beide, dann gelöscht Yund umbenannt Xzu Yund dann auch verändert, und Sie laufen git log Y, werden Sie Nachrichten für beide bekommen altY und neu ein. Und im Gegenteil, --followSie erhalten Commits bezüglich dieser Datei, wenn sie benannt wurde Xund als sie benannt wurde Y.
MarSoft
7
Verwenden Sie "git log --all filename", um alle Commits in allen Zweigen
anzuzeigen
122
git log pathsollte tun was du willst. Vom git logMann :
[--] <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.
Funktioniert nicht, wenn sich der Pfad der Datei geändert hat. Jackrabbits Antwort funktioniert in diesem Fall.
Kwahn
1
Dies funktioniert , wenn Sie benötigen , um das Protokoll zu einem bestimmten Zweig zu beschränken
ams
63
Ich habe mir das genau angesehen und all diese Antworten scheinen mir nicht wirklich alle Verpflichtungen in allen Branchen zu zeigen.
Hier ist, was ich mir ausgedacht habe, indem ich mit den Optionen für die gitk-Bearbeitungsansicht herumgespielt habe. Dies zeigt mir alle Commits für eine Datei, unabhängig von Zweig, lokal, Reflog und Remote.
Dies ist perfekt, wenn jemand Änderungen vornimmt, aber vergisst, wo er die Änderungen vorgenommen hat.
EarthmeLon
2
Sehr hilfreich. Beinhaltet auch Stash Commits
Juan Antonio Tubío
Dies sollte die bevorzugte Antwort sein. Die Frage war, alle Commits zu finden, das tut dieser.
Carl verbiest
Beachten Sie, dass --reflogCommits enthalten sind, die neu basiert / geändert oder auf andere Weise verworfen wurden. Vielleicht sollte das offensichtlich sein, aber ich habe versucht, dies zu verwenden git logund herauszufinden, warum ich scheinbar doppelte Commits sah!
Soren Bjornstad
43
Verwenden Sie den folgenden Befehl, um Commits für eine bestimmte Datei abzurufen:
Ich verstehe, dass dies die Frage nicht genau beantwortet, da er eine Liste von Commits wollte, aber das ist Gold und geht in meine Akte.
zkent
3
Dies funktioniert überhaupt nicht, wenn die Datei nicht im aktuell ausgecheckten Zweig vorhanden ist. Sie können den Zweig wie hinzufügen git log -p mybranch -- filenameoder nur verwenden git log --all -- filename, um in allen Zweigen zu suchen.
Soren Bjornstad
37
Es sollte so einfach sein wie git log <somepath>; Überprüfen Sie die Manpage ( git-log(1)).
Persönlich verwende ich gerne, git log --stat <path>damit ich die Auswirkungen jedes Commits auf die Datei sehen kann.
Oder selbst -pwenn Sie den vollständigen Unterschied sehen möchten, nicht nur, dass einige Zeilen geändert wurden.
Cascabel
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 nicht die vollständigen Unterschiede jedes einzelnen Commits sehen, das jemals eine Datei berührt hat. Normalerweise suche ich nach einer bestimmten Sache, damit ich ein Protokoll mit nur Auswirkungen und dann git showüber die spezifischen Commits erhalten kann, die so aussehen, als wären sie wichtig.
Rfunduk
git log --stat --follow - * .html => Liste der Commits mit genau einer Datei in jedem Commit ausgeben. Sehr schön!
Sergio Belevskij
18
Alternativ (seit Git 1.8.4) ist es auch möglich, alle Commits abzurufen, die einen bestimmten Teil einer Datei geändert haben . Sie können dies erhalten, indem Sie die Startzeile und die Endzeilennummer übergeben.
Das zurückgegebene Ergebnis wäre die Liste der Commits, die diesen bestimmten Teil geändert haben. Der Befehl lautet wie folgt:
Wie jackrabb1t hervorhob, --followist es robuster, da es weiterhin den Verlauf über das Umbenennen / Verschieben hinaus auflistet. Wenn Sie also nach einer Datei suchen, die sich derzeit nicht im selben Pfad befindet, oder nach einer Datei, die während verschiedener Commits umbenannt wurde, wird sie von --follow nachverfolgt.
Dies kann eine bessere Option sein, wenn Sie die Namens- / Pfadänderungen visualisieren möchten:
git log --follow --name-status -- <path>
Aber wenn Sie eine kompaktere Liste mit nur dem wollen, was zählt:
--followfunktioniert für einen einzelnen Pfad , der ein Verzeichnis sein kann. Wenn ein Verzeichnis übergeben wird, wird es rekursiv ausgeführt und meldet Änderungen an alle Dateien unterhalb dieses Punkts.
StvnW
10
Wenn Sie versuchen, einer Datei zu folgen, die in einem früheren Commit gelöscht wurde, verwenden Sie
Für gitNeulinge: Verwenden Sie diese Option git log -p --follow -- filename, um auch die Änderungen anzuzeigen. Beachten Sie auch: "Dateiname" kann eine Datei, ein Verzeichnis oder ein Submodul sein.
Tino
8
Wenn Sie alle Commits anzeigen möchten, die eine Datei in allen Zweigen geändert haben, verwenden Sie Folgendes:
Wenn Sie alle Änderungen sehen möchten, die in Commits vorgenommen wurden, die eine bestimmte Datei geändert haben (und nicht nur die Änderungen an der Datei selbst), können Sie Folgendes übergeben --full-diff:
Dies bedeutet, dass 5 Commits diese Datei berührt haben. Die chronologische Reihenfolge ist umgekehrt, daher ist das erste Commit in der Liste b7c4f0d7das aktuellste.
Es kann mit "sudo apt-get install git-gui gitk" installiert werden. Es kann verwendet werden, um Commits einer bestimmten Datei mit "gitk <Dateiname>" anzuzeigen.
Antworten:
Das
--follow
funktioniert für eine bestimmte DateiUnterschied zu anderen Lösungen gegeben
Beachten Sie, dass andere Lösungen
git log path
(ohne--follow
) enthalten. Dieser Ansatz ist praktisch, wenn Sie z. B. Änderungen in einem Verzeichnis verfolgen möchten , aber beim Umbenennen von Dateien stolpern (also verwenden--follow filename
).quelle
--follow
Konten für Umbenennungen, so ist dies robuster alsgit log -- path
--follow
ein Pfad akzeptiert wird , der 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 nicht in der Manpage dokumentiert und möglicherweise nicht dauerhaft.)git log filename?
git log filename
folgt nicht dem Umbenennen von Dateien, dh es werden alle Commits in Bezug auf diesen Dateinamen angezeigt (nicht die tatsächliche Datei). Wenn Sie Dateien erstellenX
undY
änderte beide, dann gelöschtY
und umbenanntX
zuY
und dann auch verändert, und Sie laufengit log Y
, werden Sie Nachrichten für beide bekommen altY
und neu ein. Und im Gegenteil,--follow
Sie erhalten Commits bezüglich dieser Datei, wenn sie benannt wurdeX
und als sie benannt wurdeY
.git log path
sollte tun was du willst. Vomgit log
Mann :quelle
Ich habe mir das genau angesehen und all diese Antworten scheinen mir nicht wirklich alle Verpflichtungen in allen Branchen zu zeigen.
Hier ist, was ich mir ausgedacht habe, indem ich mit den Optionen für die gitk-Bearbeitungsansicht herumgespielt habe. Dies zeigt mir alle Commits für eine Datei, unabhängig von Zweig, lokal, Reflog und Remote.
Es funktioniert auch mit
git log
:quelle
--reflog
Commits enthalten sind, die neu basiert / geändert oder auf andere Weise verworfen wurden. Vielleicht sollte das offensichtlich sein, aber ich habe versucht, dies zu verwendengit log
und herauszufinden, warum ich scheinbar doppelte Commits sah!Verwenden Sie den folgenden Befehl, um Commits für eine bestimmte Datei abzurufen:
quelle
git log -p mybranch -- filename
oder nur verwendengit log --all -- filename
, um in allen Zweigen zu suchen.Es sollte so einfach sein wie
git log <somepath>
; Überprüfen Sie die Manpage (git-log(1)
).Persönlich verwende ich gerne,
git log --stat <path>
damit ich die Auswirkungen jedes Commits auf die Datei sehen kann.quelle
-p
wenn Sie den vollständigen Unterschied sehen möchten, nicht nur, dass einige Zeilen geändert wurden.git show
über die spezifischen Commits erhalten kann, die so aussehen, als wären sie wichtig.Alternativ (seit Git 1.8.4) ist es auch möglich, alle Commits abzurufen, die einen bestimmten Teil einer Datei geändert haben . Sie können dies erhalten, indem Sie die Startzeile und die Endzeilennummer übergeben.
Das zurückgegebene Ergebnis wäre die Liste der Commits, die diesen bestimmten Teil geändert haben. Der Befehl lautet wie folgt:
wo
upperLimit
ist dasstart_line_number
undlowerLimit
ist dasending_line_number
Weitere Informationen - https://www.techpurohit.com/list-some-useful-git-commands
quelle
Wie jackrabb1t hervorhob,
--follow
ist es robuster, da es weiterhin den Verlauf über das Umbenennen / Verschieben hinaus auflistet. Wenn Sie also nach einer Datei suchen, die sich derzeit nicht im selben Pfad befindet, oder nach einer Datei, die während verschiedener Commits umbenannt wurde, wird sie von --follow nachverfolgt.Dies kann eine bessere Option sein, wenn Sie die Namens- / Pfadänderungen visualisieren möchten:
Aber wenn Sie eine kompaktere Liste mit nur dem wollen, was zählt:
oder auch
Der Nachteil ist, dass
--follow
nur für eine einzelne Datei funktioniert.quelle
--follow
funktioniert für einen einzelnen Pfad , der ein Verzeichnis sein kann. Wenn ein Verzeichnis übergeben wird, wird es rekursiv ausgeführt und meldet Änderungen an alle Dateien unterhalb dieses Punkts.Wenn Sie versuchen, einer Datei zu folgen, die in einem früheren Commit gelöscht wurde, verwenden Sie
quelle
git
Neulinge: Verwenden Sie diese Optiongit log -p --follow -- filename
, um auch die Änderungen anzuzeigen. Beachten Sie auch: "Dateiname" kann eine Datei, ein Verzeichnis oder ein Submodul sein.Wenn Sie alle Commits anzeigen möchten, die eine Datei in allen Zweigen geändert haben, verwenden Sie Folgendes:
quelle
Wenn Sie nach allen Commits nach
filename
und nicht nach suchen möchtenfilepath
, verwenden Sie:quelle
Wenn Sie alle Änderungen sehen möchten, die in Commits vorgenommen wurden, die eine bestimmte Datei geändert haben (und nicht nur die Änderungen an der Datei selbst), können Sie Folgendes übergeben
--full-diff
:quelle
[branch]
Verwenden Sie
git log --all <filename>
diese Option , um die Commits anzuzeigen, die<filename>
in allen Zweigen Einfluss haben .quelle
Angenommen, das Paket "gitk" ist bereits installiert.
Wenn es nicht installiert ist, gehen Sie folgendermaßen vor:
Versuchen Sie dann den obigen Befehl. Es ist für Linux ... Es könnte Linux-Benutzern helfen, wenn sie eine grafische Benutzeroberfläche wünschen.
quelle
gitk
mit Git für Windows gebündelt ist.Um nur eine Liste der Commit-Hashes zu erhalten, verwenden Sie
git rev-list
Ausgabe:
Dies bedeutet, dass 5 Commits diese Datei berührt haben. Die chronologische Reihenfolge ist umgekehrt, daher ist das erste Commit in der Liste
b7c4f0d7
das aktuellste.quelle
Unter Linux können Sie dafür gitk verwenden.
Es kann mit "sudo apt-get install git-gui gitk" installiert werden. Es kann verwendet werden, um Commits einer bestimmten Datei mit "gitk <Dateiname>" anzuzeigen.
quelle
Referenz
quelle