Wie kann ich den Änderungsverlauf einer einzelnen Datei in Git anzeigen und die Details mit den Änderungen vervollständigen?
Ich bin so weit gekommen wie:
git log -- [filename]
was zeigt mir den Commit-Verlauf der Datei, aber wie komme ich dazu, dass sich der Inhalt jeder Datei ändert?
Ich versuche, den Übergang von MS SourceSafe durchzuführen, und das war früher ein einfacher right-click
→ show history
.
Dafür würde ich verwenden:
gitk [filename]
oder um Dateinamen nach Umbenennungen zu verfolgen
gitk --follow [filename]
Sie können verwenden
git log -p filename
git soll die Patches für jeden Protokolleintrag generieren.
Sehen
git help log
für mehr Optionen - es kann tatsächlich viele nette Dinge tun :) Um nur das Diff für ein bestimmtes Commit zu erhalten, können Sie
git show HEAD
oder jede andere Überarbeitung nach Kennung. Oder benutze
gitk
um die Änderungen visuell zu durchsuchen.
git log --follow -p -- path-to-file
Dies zeigt den gesamten Verlauf der Datei (einschließlich des Verlaufs nach dem Umbenennen und mit Unterschieden für jede Änderung).
Mit anderen Worten, wenn die Datei mit dem Namen bar
einmal foo
genannt wurde, zeigt git log -p bar
(ohne die Option --follow
) den Verlauf der Datei nur bis zu dem Punkt an, an dem er sich befindet wurde umbenannt - der Verlauf der Datei wird nicht angezeigt, wenn er als foo
bezeichnet wurde. Mit git log --follow -p bar
wird der gesamte Verlauf der Datei angezeigt, einschließlich aller Änderungen an der Datei, als diese als foo
bezeichnet wurde. Die Option -p
stellt sicher, dass Unterschiede bei jeder Änderung berücksichtigt werden.
Wenn Sie lieber textbasiert bleiben möchten, können Sie tig verwenden.
Schnellinstallation:
# apt-get install tig
$ brew install tig
Verwenden Sie diese Option, um den Verlauf einer einzelnen Datei anzuzeigen: tig [filename]
Oder durchsuchen Sie den detaillierten Repo-Verlauf: tig
Ähnlich wie gitk
, jedoch textbasiert. Unterstützt Farben im Terminal!
git whatchanged -p filename
entspricht in diesem Fall auch git log -p filename
.
Sie können auch sehen, wann eine bestimmte Codezeile in einer Datei mit git blame filename
geändert wurde. Dies gibt eine kurze Festschreibungs-ID, den Autor, den Zeitstempel und die vollständige Codezeile für jede Zeile in der Datei aus. Dies ist sehr nützlich, wenn Sie einen Fehler gefunden haben und wissen möchten, wann er aufgetreten ist (oder wer daran schuld ist).
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 Log Selected auswählen
Die Anzeige (unten) ist viel freundlicher als gitk und die meisten anderen aufgeführten Optionen. Leider gibt es (derzeit) keine einfache Möglichkeit, diese Ansicht über die Befehlszeile zu starten - die CLI von SourceTree öffnet derzeit nur Repos.
So zeigen Sie an, welche Revision und welcher Autor die einzelnen Zeilen einer Datei zuletzt geändert haben:
git blame filename
oder wenn Sie die leistungsfähige Schuld GUI verwenden möchten:
git gui blame filename
Zusammenfassung der anderen Antworten, nachdem Sie sie gelesen und ein bisschen gespielt haben:
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 deutlich besser lesbare Betrachtungsweisen zu erhalten.
gitk --follow --all -p dir/file.c
tig --follow --all -p dir/file.c
Unter debian/ubuntu lautet der Installationsbefehl für diese schönen Tools wie erwartet:
Sudo apt-get install gitk tig
Und ich benutze gerade:
alias gdf='gitk --follow --all -p'
so dass ich einfach gdf dir
eingeben kann, um einen fokussierten Verlauf von allem im Unterverzeichnis dir
zu erhalten.
Fügen Sie diesen Alias zu Ihrer .gitconfig hinzu:
[alias]
lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative
Und benutze den Befehl so:
> git lg
> git lg -- filename
Die Ausgabe sieht fast genauso aus wie die Gitk-Ausgabe. Genießen.
In letzter Zeit habe ich tig
entdeckt und fand es sehr nützlich. In einigen Fällen würde ich mir wünschen, dass es A oder B tut, aber die meiste Zeit ist es ziemlich ordentlich.
Für Ihren Fall könnte tig <filename>
das sein, wonach Sie suchen.
Ich schrieb Git-Wiedergabe für genau diesen Zweck
pip install git-playback
git playback [filename]
Dies hat den Vorteil, dass sowohl die Ergebnisse in der Befehlszeile angezeigt werden (z. B. git log -p
) als auch Sie mit den Pfeiltasten durch die einzelnen Festschreibungen navigieren können (z. B. gitk
).
Wenn Sie den gesamten Verlauf einer Datei anzeigen möchten, verwenden Sie einschließlich on alle anderen branches:
gitk --all <filename>
Wenn Sie die Git-Benutzeroberfläche (unter Windows) im Repository-Menü verwenden, können Sie "Master-Verlauf visualisieren" verwenden. Markieren Sie im oberen Bereich ein Commit und rechts unten eine Datei, und links unten sehen Sie den Unterschied für dieses Commit.
Mit dem ausgezeichneten Git Extensions gelangen Sie zu einem Punkt im Verlauf, an dem die Datei noch vorhanden war (wenn sie gelöscht wurde, gehen Sie einfach zu HEAD), und wechseln Sie zur Registerkarte File tree
. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie File history
.
Standardmäßig folgt es der Datei durch die Umbenennungen, und auf der Registerkarte Blame
kann der Name bei einer bestimmten Revision angezeigt werden.
Es hat ein paar kleinere Probleme, wie das Anzeigen von fatal: Not a valid object name
in der Registerkarte View
, wenn Sie auf die Löschrevision klicken, aber damit kann ich leben. :-)
SmartGit :
Sie können dies auch versuchen, um die Festschreibungen aufzulisten, die einen bestimmten Teil einer Datei geändert haben (implementiert in Git 1.8.4).
Das zurückgegebene Ergebnis ist die Liste der Commits, die diesen bestimmten Teil geändert haben. Befehl :
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
dabei ist upperLimit die start_line_number und lowerLimit die ending_line_number der Datei.
Weitere Informationen finden Sie unter https://www.techpurohit.com/list-some-useful-git-commands
Die Antwort, nach der ich gesucht habe, die nicht in diesem Thread enthalten war, besteht darin, Änderungen in Dateien zu sehen, die ich für das Festschreiben bereitgestellt hatte. d.h.
git diff --cached
Wenn Sie TortoiseGit verwenden, sollten Sie in der Lage sein, mit der rechten Maustaste auf die Datei zu klicken und TortoiseGit --> Show Log
auszuführen. Stellen Sie im folgenden Fenster Folgendes sicher:
Die Option 'Show Whole Project
' ist nicht aktiviert.
Die Option 'All Branches
' ist aktiviert.
git diff -U <filename>
gibt Ihnen einen einheitlichen Unterschied.
Es sollte rot und grün gefärbt sein. Wenn nicht, führen Sie zuerst: git config color.ui auto
aus.
Sie können vscode mit GitLens verwenden, es ist ein sehr mächtiges Werkzeug. Gehen Sie nach der Installation von GitLens zur Registerkarte GitLens, wählen Sie FILE HISTORY
und durchsuchen Sie sie.
Wenn Sie Eclipse mit dem Git-Plugin verwenden, hat es eine ausgezeichnete Vergleichsansicht mit dem Verlauf. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Vergleichen mit" => "Verlauf".