Wie kann ich den Änderungsverlauf einer einzelnen Datei in Git anzeigen und die Details mit den Änderungen vervollständigen?
Ich bin so weit gekommen:
git log -- [filename]
Das zeigt mir den Commit-Verlauf der Datei, aber wie komme ich zum Inhalt jeder Dateiänderung?
Ich versuche den Übergang von MS SourceSafe zu machen und das war früher ein einfaches right-click
→ show history
.
Antworten:
Dafür würde ich verwenden:
oder um Dateinamen nach Umbenennungen zu folgen
quelle
Sie können verwenden
damit git die Patches für jeden Protokolleintrag generiert.
Sehen
für mehr Optionen - es kann tatsächlich eine Menge netter Dinge tun :) Um nur den Unterschied für ein bestimmtes Commit zu bekommen, können Sie
oder jede andere Überarbeitung nach Kennung. Oder verwenden
um die Änderungen visuell zu durchsuchen.
quelle
git log --follow -p -- path-to-file
Dies zeigt den gesamten Verlauf der Datei an (einschließlich des Verlaufs über das Umbenennen hinaus und mit Unterschieden für jede Änderung).
Mit anderen Worten, wenn die benannte Datei
bar
einmal benannt wurdefoo
, wirdgit log -p bar
(ohne die--follow
Option) nur der Verlauf der Datei bis zu dem Punkt angezeigt, an dem sie umbenannt wurde. Der Verlauf der Datei wird dann nicht angezeigt, wenn sie als bekannt warfoo
. Mitgit log --follow -p bar
wird der gesamte Verlauf der Datei angezeigt, einschließlich aller Änderungen an der Datei, als diese bekannt warfoo
. Die-p
Option stellt sicher, dass bei jeder Änderung Unterschiede enthalten sind.quelle
--follow
stellt sicher, dass Sie die Umbenennung von Dateien sehen. (2.)-p
stellt sicher, dass Sie sehen, wie die Datei geändert wird. (3.) Es handelt sich nur um eine Befehlszeile.--
hinzugefügt wurde, aber ich weiß nicht, warum dies das Beste macht? Was macht es?--
Option teilt Git mit, dass das Ende der Optionen erreicht ist und dass alles, was folgt--
, als Argument behandelt werden sollte. Fürgit log
das macht nur einen Unterschied , wenn Sie einen Pfadnamen haben, der mit einem beginnt Strich . Angenommen, Sie wollten den Verlauf einer Datei mit dem unglücklichen Namen "--follow" kennen:git log --follow -p -- --follow
--
nützlich, weil es auch vorrevision
Namen schützen kann , die mit dem von Ihnen eingegebenen Dateinamen übereinstimmen, was tatsächlich beängstigend sein kann. Beispiel: Wenn Sie sowohl einen Zweig als auch eine Datei mit dem Namen hättenfoo
,git log -p foo
würde der Git-Protokollverlauf bis zu angezeigtfoo
, nicht der Verlauf für die Dateifoo
. Aber @DanMoulding ist richtig, da der--follow
Befehl nur einen einzigen Dateinamen als Argument verwendet, ist dies weniger notwendig, da es kein sein kannrevision
. Das habe ich gerade gelernt. Vielleicht hatten Sie Recht, es dann aus Ihrer Antwort herauszulassen; Ich bin mir nicht sicher.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,
gitk
aber textbasiert. Unterstützt Farben im Terminal!quelle
tig -- path/to/specific/file
git whatchanged -p filename
ist auchgit log -p filename
in diesem Fall gleichwertig .Sie können auch sehen, wann eine bestimmte Codezeile in einer Datei mit geändert wurde
git blame filename
. Dadurch werden für jede Zeile in der Datei eine kurze Festschreibungs-ID, der Autor, der Zeitstempel und die vollständige Codezeile ausgedruckt. Dies ist sehr nützlich, nachdem Sie einen Fehler gefunden haben und wissen möchten, wann er eingeführt wurde (oder wer schuld daran war).quelle
filename
ist aber im Befehl nicht optionalgit blame filename
.SourceTree-Benutzer
Wenn Sie SourceTree verwenden, um Ihr Repository zu visualisieren (es ist kostenlos und recht gut), können Sie mit der rechten Maustaste auf eine Datei klicken und Ausgewähltes Protokoll auswählen
Die Anzeige (unten) ist viel freundlicher als gitk und die meisten anderen aufgeführten Optionen. Leider gibt es (zu diesem Zeitpunkt) keine einfache Möglichkeit, diese Ansicht über die Befehlszeile zu starten. Die CLI von SourceTree öffnet derzeit nur Repos.
quelle
So zeigen Sie an, welche Revision und welcher Autor die einzelnen Zeilen einer Datei zuletzt geändert haben:
oder wenn Sie die leistungsstarke GUI für Schuldzuweisungen verwenden möchten:
quelle
Zusammenfassung anderer Antworten, nachdem Sie sie gelesen und ein wenig gespielt haben:
Der übliche Befehlszeilenbefehl wäre
Sie können aber auch entweder gitk (gui) oder tig (text-ui) verwenden, um eine viel besser lesbare Sichtweise zu ermöglichen.
Unter debian / ubuntu lautet der Installationsbefehl für diese schönen Tools wie erwartet:
Und ich benutze derzeit:
so dass ich nur tippen kann
gdf dir
, um eine fokussierte Geschichte von allem im Unterverzeichnis zu erhaltendir
.quelle
--all
ist für alle Zweige, der Rest wird in @ Dans Antwort erklärtFügen Sie diesen Alias zu Ihrer .gitconfig hinzu:
Und verwenden Sie den Befehl wie folgt:
Die Ausgabe sieht fast genauso aus wie die Gitk-Ausgabe. Genießen.
quelle
git lg -p filename
- es gibt einen schönen Unterschied der gesuchten Datei zurück.In letzter Zeit habe ich es entdeckt
tig
und fand es sehr nützlich. Es gibt einige Fälle, in denen ich mir A oder B wünschte, aber die meiste Zeit ist es ziemlich ordentlich.Für Ihren Fall
tig <filename>
könnte es das sein, wonach Sie suchen.http://jonas.nitro.dk/tig/
quelle
Sie können vscode mit GitLens verwenden , es ist ein sehr leistungsfähiges Tool. Gehen Sie nach der Installation von GitLens zur Registerkarte GitLens, wählen
FILE HISTORY
Sie und Sie können sie durchsuchen.quelle
Ich habe Git-Playback genau für diesen Zweck geschrieben
Dies hat den Vorteil, dass sowohl die Ergebnisse in der Befehlszeile angezeigt werden (wie
git log -p
), als dass Sie jedes Commit mit den Pfeiltasten (wiegitk
) durchlaufen können .quelle
Oder:
gitx -- <path/to/filename>
wenn du gitx verwendest
quelle
Sie können dies auch versuchen, indem die Commits aufgelistet werden, die einen bestimmten Teil einer Datei geändert haben (implementiert in Git 1.8.4).
Das zurückgegebene Ergebnis wäre die Liste der Commits, die diesen bestimmten Teil geändert haben. Befehl :
Dabei ist UpperLimit die Startnummer und LowerLimit die Endnummer der Datei.
Weitere Informationen finden Sie unter https://www.techpurohit.com/list-some-useful-git-commands
quelle
Wenn Sie die ganze Geschichte einer Datei sehen wollen, einschließlich auf allen anderen Zweigen verwenden:
quelle
Mit den hervorragenden Git-Erweiterungen gelangen Sie zu einem Punkt im Verlauf, an dem die Datei noch vorhanden war (wenn sie gelöscht wurde, andernfalls gehen Sie einfach zu HEAD), wechseln Sie zur
File tree
Registerkarte, klicken Sie mit der rechten Maustaste auf die Datei und wählen SieFile history
.Standardmäßig folgt die Datei den Umbenennungen, und auf der
Blame
Registerkarte wird der Name bei einer bestimmten Revision angezeigt .Es hat einige kleinere Fallstricke, wie das Anzeigen
fatal: Not a valid object name
auf derView
Registerkarte, wenn Sie auf die Löschrevision klicken, aber damit kann ich leben. :-)quelle
Wenn Sie die Git-GUI (unter Windows) im Repository-Menü verwenden, können Sie "Master-Verlauf visualisieren" verwenden. Markieren Sie ein Commit im oberen Bereich und eine Datei unten rechts, und Sie sehen den Unterschied für dieses Commit unten links.
quelle
SmartGit :
quelle
Die Antwort, nach der ich gesucht habe und die nicht in diesem Thread enthalten ist, besteht darin, Änderungen in Dateien zu sehen, die ich für das Festschreiben bereitgestellt habe. dh
quelle
git diff origin/master
die vollständigen Unterschiede zwischen Ihrem lokalen Zweig und dem Hauptzweig (der von Remote-Via aktualisiert werden kanngit fetch
)Wenn Sie TortoiseGit verwenden, sollten Sie in der Lage sein, mit der rechten Maustaste auf die Datei zu klicken und dies zu tun
TortoiseGit --> Show Log
. Stellen Sie im folgenden Fenster Folgendes sicher:Die
Show Whole Project
Option ' ' ist nicht aktiviert.Die
All Branches
Option ' ' ist aktiviert.quelle
git diff -U <filename>
Geben Sie einen einheitlichen Unterschied.Es sollte rot und grün gefärbt sein. Wenn nicht, führen Sie Folgendes aus:
git config color.ui auto
zuerst.quelle
Wenn Sie Eclipse mit dem Git-Plugin verwenden, bietet es eine hervorragende Vergleichsansicht mit dem Verlauf. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Vergleichen mit" => "Verlauf".
quelle
Ich bin wahrscheinlich in der Nähe des OP, als dies begann, und suche nach etwas Einfachem, mit dem ich git difftool mit vimdiff verwenden kann , um Änderungen an Dateien in meinem Repo ab einem bestimmten Commit zu überprüfen. Ich war nicht sehr glücklich mit Antworten , die ich finden war, so dass ich diese warf git inc remental rep Orter (gitincrep) Skript zusammen und es war nützlich für mich:
Ohne Argumente aufgerufen, beginnt dies am Anfang des Repo-Verlaufs, andernfalls beginnt es mit dem von Ihnen angegebenen abgekürzten Commit-Hash und fährt mit der Gegenwart fort - Sie können jederzeit Strg-C drücken, um den Vorgang zu beenden. Alle Argumente nach dem ersten beschränken die Differenzberichte so, dass sie nur die Dateien enthalten, die unter diesen Argumenten aufgeführt sind (was meiner Meinung nach das OP wollte und ich würde es für alle außer winzigen Projekten empfehlen). Wenn Sie Änderungen an bestimmten Dateien überprüfen und von vorne beginnen möchten, müssen Sie eine leere Zeichenfolge für arg1 angeben. Wenn Sie kein vim-Benutzer sind, können Sie vimdiff durch Ihr bevorzugtes Diff-Tool ersetzen .
Das Verhalten besteht darin, die Commit-Kommentare auszugeben, wenn relevante Änderungen gefunden werden, und vimdiff- Läufe für jede geänderte Datei anzubieten (das ist git difftool- Verhalten, aber es funktioniert hier).
Dieser Ansatz ist wahrscheinlich ziemlich naiv, aber bei der Durchsicht vieler Lösungen hier und in einem verwandten Beitrag mussten viele neue Tools auf einem System installiert werden, auf das ich keinen Administratorzugriff habe, mit Schnittstellen, die ihre eigene Lernkurve hatten. Das obige Skript hat getan, was ich wollte, ohne mich damit zu befassen. Ich werde hier auf die vielen hervorragenden Vorschläge eingehen, wenn ich etwas Anspruchsvolleres brauche - aber ich denke, dies reagiert direkt auf das OP.
quelle
Ich habe eine sehr einfache Lösung gefunden, um den Verlauf der Datei schnell zu finden.
Es würde die Geschichte aller Commits zeigen.
quelle