zurücksetzen - git änderungen verwerfen
Zeigen Sie den Änderungsverlauf einer Datei mithilfe der Git-Versionierung an (14)
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 " Ausgewählte protokollieren" auswählen
Die Anzeige (unten) ist viel freundlicher als bei gitk und die meisten anderen Optionen werden aufgelistet. Leider (zu diesem Zeitpunkt) gibt es keine einfache Möglichkeit, diese Ansicht über die Befehlszeile zu starten. Die CLI von SourceTree öffnet gerade Repos.
Wie kann ich die Änderungshistorie einer einzelnen Datei in Git anzeigen und die Details mit den Änderungen vervollständigen?
Ich bin soweit gekommen:
git log -- [filename]
was zeigt mir den Commit-Verlauf der Datei, aber wie komme ich an den Inhalt jeder Dateiänderung?
Ich versuche den Übergang von MS SourceSafe zu machen, und das war früher ein einfacher right-click
→ Verlauf show history
.
Dafür würde ich verwenden:
gitk [filename]
oder um Dateinamen hinter Umbenennungen zu folgen
gitk --follow [filename]
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 wie folgt:
> git lg
> git lg -- filename
Die Ausgabe sieht fast genauso aus wie die Gitk-Ausgabe. Genießen.
Ich habe git-playback für genau diesen Zweck geschrieben
pip install git-playback
git playback [filename]
Dies hat den Vorteil, dass die Ergebnisse in der Befehlszeile gitk
(z. B. git log -p
) und Sie die einzelnen Commits mit den Pfeiltasten (z. B. gitk
) gitk
.
Mit den hervorragenden Git-Erweiterungen gelangen Sie zu einem Punkt in der Historie, an dem die Datei noch vorhanden war (wenn sie gelöscht wurde, andernfalls gehen Sie einfach zu HEAD), wechseln Sie zur Registerkarte Dateistruktur, klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie File history
.
Standardmäßig folgt die Datei den Umbenennungen. Auf der Registerkarte "Beschuldigung" kann der Name bei einer bestimmten Version angezeigt werden.
Es gibt einige kleinere Probleme, wie das Anzeigen fatal: Not a valid object name
Werte fatal: Not a valid object name
auf der Registerkarte View
wenn Sie auf die Löschungsversion klicken, aber ich kann damit leben. :-)
Sie können verwenden
git log -p filename
damit git die patches für jeden protokolleintrag generiert.
Sehen
git help log
Für mehr Optionen - es kann tatsächlich eine Menge schöner Dinge tun :) Um nur den Unterschied für ein bestimmtes Commit zu bekommen, können Sie das tun
git show HEAD
oder jede andere Revision nach Kennung. Oder verwenden
gitk
um die Änderungen visuell zu durchsuchen.
So zeigen Sie an, welche Revision und Autor zuletzt jede Zeile einer Datei geändert haben:
git blame filename
oder wenn Sie die mächtige Schuld-GUI verwenden wollen:
git gui blame filename
Wenn Sie TortoiseGit verwenden, sollten Sie mit der rechten Maustaste auf die Datei klicken und TortoiseGit --> Show Log
. Stellen Sie in dem sich öffnenden Fenster Folgendes sicher:
Die Option "
Show Whole Project
anzeigen" ist nicht aktiviert.Die Option "
All Branches
" ist aktiviert.
Wenn Sie den gesamten Verlauf einer Datei anzeigen möchten, einschließlich aller anderen Zweige, verwenden Sie:
gitk --all <filename>
Wenn Sie lieber textbasiert bleiben möchten, können Sie 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 den detaillierten Repo-Verlauf: tig
Ähnlich wie gitk
aber textbasiert. Unterstützt Farben im Terminal!
Zusammenfassung der anderen Antworten, nachdem Sie sie durchgelesen 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 die Lesbarkeit durch den Benutzer deutlich zu verbessern.
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'
so dass ich einfach gdf dir
, um eine fokussierte Geschichte von allem im Unterverzeichnis dir
.
git diff -U <filename>
gibt Ihnen einen einheitlichen Diff.
Es sollte rot und grün gefärbt sein. Wenn dies nicht der git config color.ui auto
, führen Sie zuerst git config color.ui auto
.
git log --follow -p -- file
Dadurch wird der gesamte Verlauf der Datei angezeigt (einschließlich des Verlaufs, der über die Umbenennung hinausgeht, und für jede Änderung Unterschiede).
Wenn also die Datei mit dem Namen " bar
einmal " foo
, zeigt git log -p bar
(ohne die Option --follow
) den --follow
der Datei nur bis zu dem Punkt an, an dem sie umbenannt wurde Dateigeschichte, als es als foo
. Bei Verwendung von git log --follow -p bar
wird der gesamte Verlauf der Datei git log --follow -p bar
, einschließlich aller Änderungen an der Datei, wenn diese als foo
. Die Option -p
stellt sicher, dass für jede Änderung Unterschiede enthalten sind.