Wie kann ich den Dateiversionsverlauf in Git anzeigen?

132

Mit Subversion könnte ich TortoiseSVN verwenden, um den Verlauf / das Protokoll einer Datei anzuzeigen.

Wie kann ich das mit Git machen?

Suchen Sie einfach nach einem Verlaufsdatensatz für eine bestimmte Datei und dann nach der Möglichkeit, die verschiedenen Versionen zu vergleichen.

mrblah
quelle

Antworten:

156

Verwenden Sie git logdiese Option , um den Festschreibungsverlauf anzuzeigen. Jedem Commit ist ein Revisionsspezifizierer zugeordnet, der ein Hash-Schlüssel ist (z . B. 14b8d0982044b0c49f7a855e396206ee65c0e787und b410ad4619d296f9d37f0db3d0ff5b9066838b39). Um den Unterschied zwischen zwei verschiedenen Commits anzuzeigen, verwenden Sie git diffdie ersten Zeichen der Revisionsspezifizierer beider Commits wie folgt:

# diff between commits 14b8... and b410...
git diff 14b8..b410
# only include diff of specified files
git diff 14b8..b410 path/to/file/a path/to/file/b

Wenn Sie sich einen Überblick über alle Unterschiede verschaffen möchten, die von Commit zu Commit aufgetreten sind, verwenden Sie git logoder git whatchangedmit der Patch-Option:

# include patch displays in the commit history
git log -p
git whatchanged -p
# only get history of those commits that touch specified paths
git log path/a path/b
git whatchanged path/c path/d
Christian
quelle
7
Vielen Dank für den Tipp -p, der sehr nützlich ist, um herauszufinden, welche Revisionen ein bisschen Code beinhalten.
Christopher Pickslay
100

Sieht so aus, als ob Sie Git Diff und / oder Git Log wollen . Schauen Sie sich auch gitk an

gitk path/to/file
git diff path/to/file
git log path/to/file
Baudtack
quelle
3
Hier ist ein weiteres Nicken für gitk, das eine großartige Möglichkeit bietet, alle Schnappschüsse einer einzelnen Datei in einem git-Repo zu durchsuchen.
Ray Brown
1
Standardmäßig zeigt gitk das Diff plus 10 Kontextzeilen an. Was ist jedoch, wenn Sie einen Schnappschuss der gesamten Datei anzeigen möchten? Setzen Sie einfach "Kontextlinien" auf einen großen Wert (z. B. 100000). Dann können Sie zwischen den Commits hin und her blättern und die gesamte Datei zu verschiedenen Zeitpunkten anzeigen. (Sie können auch in der Datei suchen.)
Antinom
35

Ich benutze gerne gitk name_of_file

Dies zeigt eine schöne Liste der Änderungen, die bei jedem Commit an einer Datei vorgenommen wurden, anstatt die Änderungen an allen Dateien anzuzeigen. Erleichtert das Aufspüren von Ereignissen.

Gustavo Litovsky
quelle
30

Sie können tig auch für einen netten, auf ncurses basierenden Git-Repository-Browser verwenden. So zeigen Sie den Verlauf einer Datei an:

tig path/to/file
user217433
quelle
28

Mein Favorit ist git log -p <filename>, dass Sie einen Verlauf aller Commits der angegebenen Datei sowie die Unterschiede für jedes Commit erhalten.

Hubschrauber
quelle
11

Viele Git-Verlaufsbrowser, einschließlich git log(und 'git log --graph'), gitk (in Tcl / Tk, Teil von Git), QGit (in Qt), tig (Textmodusschnittstelle zu git, mit ncurses), Giggle (in GTK +), TortoiseGit und Git-Cheetah unterstützen die Pfadbegrenzung (z gitk path/to/file. B. ).

Jakub Narębski
quelle
@ RobertVuković Ich weiß, dass dies eine alte Frage ist ... aber siehe meine Antwort unten!
Brianc
4

Wenn Sie etwas möchten, das TortoiseSVN so nahe wie möglich kommt, können Sie natürlich auch TortoiseGit verwenden .

Jörg W Mittag
quelle
Außer dass die TortoiseSvn-Shell-Erweiterungen einen Befehl zum Anzeigen des Verlaufs einer einzelnen Datei enthalten, TortoiseGit jedoch nicht.
Neutrino
3

git log --all -- path/to/file sollte arbeiten

Edson Medina
quelle
Es gibt keinen Link in meiner Antwort @ineersa
Edson Medina
1
Dies sollte die beste Antwort sein. Ich mag es nicht, beschissene GUI-Werkzeuge zu benutzen
Grobi
2

TortoiseGit bietet auch ein Befehlszeilentool, mit dem Sie den Verlauf einer Datei anzeigen können. Verwenden von PowerShell:

C:\Program` Files\TortoiseGit\bin\TortoiseGitProc.exe /command:log /path:"c:\path\to\your\file.txt"
Brianc
quelle