Frage Zeigen Sie den Änderungsverlauf einer Datei mithilfe der Git Versionierung an


Wie kann ich die Änderungshistorie einer einzelnen Datei in Git anzeigen, Details mit den Änderungen vervollständigen?

Ich bin soweit gekommen:

git log -- [filename]

Das zeigt mir den Commit-Verlauf der Datei, aber wie bekomme ich den Inhalt der einzelnen Dateiänderungen?

Ich versuche, den Übergang von MS SourceSafe zu machen, und das war früher ein einfaches right-click → show history.


2502
2017-11-10 15:42


Ursprung


Antworten:


Dafür würde ich verwenden:

gitk [filename]

oder um Dateinamen nach dem Namen zu folgen

gitk --follow [filename]

1947
2017-08-24 12:05



Sie können verwenden

git log -p filename

git erzeugt die Patches für jeden Log-Eintrag.

Sehen

git help log

für mehr Optionen - es kann tatsächlich viele schöne Dinge tun :) Um nur den Unterschied für ein bestimmtes Commit zu bekommen, können Sie

git show HEAD 

oder irgendeine andere Revision durch Bezeichner. Oder benutzen

gitk

um die Änderungen visuell zu durchsuchen.


1832
2017-11-10 15:56



git log --follow -p -- file

Dies zeigt die ganz Geschichte der Datei (einschließlich der Historie, die über Umbenennungen und Diffs für jede Änderung hinausgeht).

Mit anderen Worten, wenn die Datei benannt ist bar wurde einmal genannt foo, dann git log -p bar (ohne das --follow Option) zeigt nur den Verlauf der Datei bis zu dem Punkt an, an dem sie umbenannt wurde - sie zeigt nicht den Verlauf der Datei an, als sie bekannt war foo. Verwenden git log --follow -p bar zeigt den gesamten Verlauf der Datei an, einschließlich aller Änderungen an der Datei, als sie bekannt war foo. Das -p Option stellt sicher, dass Diffs für jede Änderung enthalten sind.


1184
2018-03-30 23:25



Wenn Sie lieber textbasiert bleiben möchten, sollten Sie es verwenden tig.

Schnellinstallation:

  • apt-get: # apt-get install tig 
  • Homebrew (OS X): $ brew install tig

Verwenden Sie es, um den Verlauf einer einzelnen Datei anzuzeigen: tig [filename]
Oder durchsuchen Sie detaillierte Repogeschichte: tig

Ähnlich zu gitk aber textbasiert. Unterstützt Farben im Terminal!


146
2018-06-07 10:23



git whatchanged -p filename entspricht auch git log -p filename in diesem Fall.

Sie können auch sehen, wenn eine bestimmte Codezeile in einer Datei geändert wurde git blame filename. Dadurch werden eine kurze Commit-ID, der Autor, der Zeitstempel und die vollständige Codezeile für jede Zeile in der Datei ausgegeben. Dies ist sehr nützlich, wenn Sie einen Fehler gefunden haben und wissen möchten, wann er eingeführt wurde (oder wer daran schuld ist).


101
2017-11-11 06:12



SourceTree-Benutzer

Wenn Sie SourceTree verwenden, um Ihr Repository zu visualisieren (es ist kostenlos und ziemlich gut), können Sie mit der rechten Maustaste auf eine Datei klicken und auswählen Protokoll ausgewählt

enter image description here

Das Display (unten) ist viel freundlicher als Gitk und die meisten anderen Optionen aufgelistet. Leider (zu diesem Zeitpunkt) gibt es keine einfache Möglichkeit, diese Ansicht von der Befehlszeile aus zu starten - die CLI von SourceTree öffnet gerade Repos.

enter image description here


91
2017-07-30 18:55



Um zu zeigen, welche Revision und welcher Autor zuletzt jede Zeile einer Datei geändert hat:

git blame filename

oder wenn Sie die mächtige Schuld-GUI verwenden möchten:

git gui blame filename

56
2017-08-11 13:01



Zusammenfassung der anderen Antworten nach dem Durchlesen und ein bisschen spielen:

Der übliche Befehlszeilenbefehl wäre

git log --follow --all -p dir/file.c

Sie können aber auch entweder gitk (gui) oder tig (text-ui) verwenden, um eine viel menschlichere Sichtweise zu erhalten.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

Unter debian / ubuntu ist der Installationsbefehl für diese schönen Tools wie erwartet:

sudo apt-get install gitk tig

Und ich verwende derzeit:

alias gdf='gitk --follow --all -p'

damit ich einfach tippen kann gdf dir um eine fokussierte Geschichte von allem im Unterverzeichnis zu bekommen dir.


39
2017-12-05 18:38