web-dev-qa-db-de.com

Zeigen Sie den Änderungsverlauf einer Datei mithilfe der Git-Versionsverwaltung an

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-clickshow history.

2840
Richard

Dafür würde ich verwenden:

gitk [filename]

oder um Dateinamen nach Umbenennungen zu verfolgen

gitk --follow [filename]
2200

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.

2066
VolkA

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.

1379
Dan Moulding

Wenn Sie lieber textbasiert bleiben möchten, können Sie tig verwenden.

Schnellinstallation:

  • apt-get : # apt-get install tig
  • Homebrew (OS X) : $ 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!

161
Falken

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

110
farktronix

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 Log Selected auswählen

enter image description here

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.

enter image description here

98
Mark Fox

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
62
yllohy

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.

45

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.

24
Palesz

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.

http://jonas.nitro.dk/tig/

20
lang2

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

15
Jian

Oder:

gitx -- <path/to/filename>

wenn Sie gitx verwenden

13
George Anderson

Wenn Sie den gesamten Verlauf einer Datei anzeigen möchten, verwenden Sie einschließlich on alle anderen branches:

gitk --all <filename>
9
Adi Shavit

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.

7
cori

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

7
PhiLho

SmartGit :

  1. Aktivieren Sie im Menü die Option zum Anzeigen unveränderter Dateien: Anzeigen/Anzeigen unveränderter Dateien
  2. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Protokoll" oder drücken Sie "Strg-L".
5

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

5
jitendrapurohit

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
4
Malks

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.

4
user3885927

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.

3

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.

enter image description here

3
foxiris

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

2
AhHatem