Ich habe ein paar Dateien umbenannt git mv
, verwendet git stash
, einen kurzen Blick auf HEAD geworfen (ohne es zu ändern) und dann git stash pop
das ganze Los wieder zurückbekommen. Meine Züge waren von der Festschreibungsliste verschwunden, daher habe ich sie mit überarbeitet git rm
und die Festschreibungsnachricht behauptete, Git habe festgestellt, dass die Umbenennung eine Umbenennung war. Also dachte ich nicht mehr daran.
Aber jetzt, nach dem Festschreiben, kann ich nicht mehr auf den Verlauf der verschobenen Dateien zugreifen! Folgendes sagt git zu dem fraglichen Commit:
~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.h
delete mode 100644 test/R_DebugUI_iOS.m
create mode 100644 system/runtime/src/R_DebugUI_iOS.h
create mode 100644 system/runtime/src/R_DebugUI_iOS.m
<<snip older commits>>
~/projects%
Ich versuche jetzt, den Verlauf einer dieser verschobenen Dateien abzurufen, damit ich mir eine alte Version ansehen kann, aber ich bekomme nichts sehr Nützliches:
~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
~/projects/system/runtime/src%
(Ich habe versucht , es auch ohne -M
, -C
und --find-copies-harder
, aber ohne Erfolg.)
Ich kann seine Geschichte unter seinem alten Namen abrufen, der an dem Punkt endet, an dem er von seinem alten Standort gelöscht wurde:
~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.m
commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date: Tue Dec 7 23:52:51 2010 +0000
Can set debug UI's alpha.
<<snip older commits>>
~/projects%
Diesmal stecke ich also nicht ganz fest, aber ich würde nicht gerne die ganze Zeit so etwas tun müssen. (Ich gehe davon aus, dass eine ganze Reihe von Dateien mindestens einmal in ihrem Leben verschoben werden.)
Mache ich etwas falsch? Die alte und die neue Kopie der Datei sind zu 98,8% gleich (2 von 166 Zeilen wurden geändert). Mein Verständnis ist, dass git in diesem Fall in der Lage sein sollte, die Datei zu verfolgen, da es Umbenennungsvorgänge ableitet, anstatt sie explizit zu speichern, und die Dateien so ähnlich sind, dass ich glaube, dass sie gleich betrachtet werden sollten.
Kann ich irgendetwas tun, um das zu beheben?
Antworten:
Bitte versuchen Sie es mit
git log --follow
Ihrer Datei. Ich lerne von hier Ist es möglich, Dateien in Git zu verschieben / umzubenennen und ihren Verlauf beizubehalten?quelle
fatal: ambiguous argument 'file.txt': unknown revision or path not in the working tree
, versuchen Sie git log --follow - file.txtNun, ich sehe meine Umbenennungen mit
git log -M --summary
..quelle
git log -M --summary
gibt keine Umbenennungsinformationen an, wenn Sie nur den Verlauf einer bestimmten Datei betrachten, dh mit einem Dateiargument.Beantwortung meiner eigenen Frage, da ich es geschafft habe, meine Bedenken auszuräumen, auch wenn ich mein Problem nicht genau gelöst habe. (
git log --follow
funktioniert bei mir aber immer noch nicht.)Erstens enthält das
--summary
Protokoll für das Umbenennungs-Commit diedelete
Zeile mit dem alten Namen der Datei. Wenn es also leicht zu erkennen ist, können Sie den alten Namen undgit log
von dort aus finden.Wenn es Teil eines großen Commits ist und daher etwas schwerer zu erkennen ist - und diese Situation war eine meiner Sorgen -,
git blame -C
kann es mit dem neuen Namen der Datei bei der ersten Überarbeitung nach dem Umbenennen verwendet werden. Vermutlich bleiben Zeilen aus der Originaldatei! - Git sollte also ihre Quelle finden und den alten Dateinamen anzeigen (und einen Commit-Hash für ein gutes Maß). Sie können dann den Weg mit aufnehmengit log
.Wenn Sie also Interesse an der Historie der Datei als Einheit haben (aus welchem Grund auch immer), scheint dies relativ einfach zu sein. Obwohl ich den Eindruck habe, dass Git es vorziehen würde, wenn Sie es richtig verwenden.
quelle
git log --follow .
wo das Arbeitsverzeichnis der neue Speicherort ist, nicht funktioniert, währendgit log --follow path/to/new/dir
, ausgeführt von einem gemeinsamen übergeordneten Verzeichnis des alten und des neuen Speicherorts, funktioniert--follow
Parameter funktioniert, aber Sie müssen tun:git log --follow -- ./path/to/file
git -log filename.cs
Festschreiben der Dateibewegung stoppt (das aktuelle Verzeichnis wird auf den Ordner der Datei festgelegt). Das VS-Verlaufsfenster zeigt jedoch das gesamte Dateiänderungsprotokoll an. Ich kann auch sehen, dass die Datei mit dem Github-Desktop verschoben wurde. Abergit log -10 --follow filename.cs
zeigt das Protokoll vor dem Umzug begehen zu.Ich glaube, das ist es, wonach du suchst.
quelle