Antworten:
Sie müssen -M verwenden, damit git die verschobene Datei beim Unterschieden automatisch erkennt. Mit justgit diff
von Knittl funktioniert bei mir nicht.
Also einfach: git diff -M
sollte es tun.
Die Dokumentation für diesen Schalter lautet:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfig
?
git diff
. Das Ausführen git diff -M
einer einzelnen (umbenannten) Datei meldet keine Umbenennung.
git log --follow -- file_after_move.txt
funktioniert aber gut. Es zeigt die gesamte Geschichte, auch vor dem Umzug. Irgendwelche Ideen? Ich renne git version 2.11.0.windows.1
.
-C
Option zum Erkennen von Kopien ist nützlich und ähnlich. Ich habe es verwendet -M
, um einen Diff zu betrachten, bei dem ich eine Datei in zwei umgestaltet hatte (wobei keiner der Namen mit dem Original übereinstimmt).
Zusätzlich zu dem, was knittl geschrieben hat , können Sie immer Folgendes verwenden:
git diff HEAD:./oldfilename newfilename
Dabei HEAD:./oldfilename
bedeutet alter Dateiname im letzten Commit (in HEAD) relativ zum aktuellen Verzeichnis.
Wenn Sie nicht genug neues Git haben, müssten Sie stattdessen verwenden:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
in das Verzeichnis und nicht --
vor dem commit:path
Paar hinzufügen . Git scheint hier mit der Syntax sehr wählerisch zu sein.
<commit-ish>:<pathname>
Syntax ist eine Objektkennung, etwas Git-ish; nachdem --
Git nur Dateinamen erwartet.
Mit Git 2.9 (Juni 2016) müssen Sie nichts mehr hinzufügen -M
. git diff
Verwendet-M
standardmäßig.
Siehe Commit 5404c11 , Commit 9501d19 , Commit a9276a6 , Commit f07fc9e , Commit 62df1e6 (25. Februar 2016) von Matthieu Moy ( moy
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 5d2a30d , 03. April 2016)
diff
:diff.renames
standardmäßig aktivierenDie Umbenennungserkennung ist eine sehr praktische Funktion, und neue Benutzer sollten nicht in der Dokumentation stöbern müssen, um davon zu profitieren.
Mögliche Einwände gegen die Aktivierung der Umbenennungserkennung sind, dass sie manchmal fehlschlägt und manchmal langsam ist. Die Umbenennungserkennung ist jedoch in einigen Fällen wie "
git status
" und "git merge
" bereits standardmäßig aktiviert , sodass durch das Aktivierendiff.renames
die Situation nicht grundlegend geändert wird. Wenn die Umbenennungserkennung fehlschlägt, schlägt sie jetzt konsistent zwischen "git diff
" und "git status
" fehl .Diese Einstellung wirkt sich nicht auf Installationsbefehle aus, daher sind gut geschriebene Skripte nicht betroffen.
git diff -M
Aktiviert die Umbenennungserkennung, wie andere gesagt haben (und wie @VonC hervorhob, ist sie ab Git 2.9 standardmäßig aktiviert). Wenn Sie jedoch einen großen Änderungssatz haben, wird die Erkennung ungenauer Umbenennungen möglicherweise immer noch deaktiviert. Git zeigt eine Warnung wie die folgende an, die im angezeigten Diff leicht zu übersehen ist:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
Stellen Sie in diesem Fall die Konfigurationsoption beispielsweise wie von git vorgeschlagen ein
git config diff.renamelimit 450
und führen Sie Ihren diff-Befehl erneut aus.
Aus irgendeinem Grund hat die Verwendung HEAD:./oldfilename
(oder der absolute Pfad) bei mir nicht funktioniert, aber HEAD:oldfilename
(danke cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
?
einfach git diff
ohne Argumente ausführen , oder git diff -- newfilename
. git ist klug genug, um die richtigen Dateien / Inhalte zu vergleichen (dh den ursprünglichen Inhalt vor dem Umbenennen mit dem geänderten Inhalt nach dem Umbenennen).
git mv
Sie einfach eine einzelne Datei erstellen und dann den bereitgestellten Status mit einem anderen ansonsten identischen Zweig vergleichen, wird der Unterschied "Alles wurde gelöscht und neu erstellt" erzeugt, sofern er nicht -M
verwendet wird.
git diff -- yourRenamedFile
ausreichen. Siehe meine Antwort unten