Die anderen Antworten decken bereits ab, dass Sie einfach git add NEW && git rm OLD
damit Git die Verschiebung erkennt.
Wenn Sie jedoch die Datei im Arbeitsverzeichnis bereits geändert haben, wird die add
+ rm
Ansatz fügt die Änderungen in den Index ein, was in einigen Fällen unerwünscht sein kann (z.B. im Falle von umfangreichen Änderungen erkennt Git möglicherweise nicht mehr, dass es sich um eine Umbenennung einer Datei handelt).
Nehmen wir an, Sie möchten die umbenennen zum Index, aber keine Änderungen. Der offensichtliche Weg, dies zu erreichen, ist eine Umbenennung hin und her mv NEW OLD && git mv OLD NEW
.
Es gibt aber auch eine (etwas kompliziertere) Möglichkeit, dies direkt im Index zu tun, ohne die Datei im Arbeitsbaum umzubenennen:
info=$(git ls-files -s -- "OLD" | cut -d' ' -f-2 | tr ' ' ,)
git update-index --add --cacheinfo "$info,NEW" &&
git rm --cached "$old"
Dies kann auch als Alias in Ihrer ~/.gitconfig
:
[alias]
mv-index = "!f() { \
old=\"$1\"; \
new=\"$2\"; \
info=$(git ls-files -s -- \"$old\" | cut -d' ' -f-2 | tr ' ' ,); \
git update-index --add --cacheinfo \"$info,$new\" && \
git rm --cached \"$old\"; \
}; f"
3 Stimmen
Für eine bestimmte Datei
old_file.txt
entoncesgit mv old_file.txt new_file.txt
ist gleichbedeutend mitgit rm --cached old_file.txt
,mv old_file.txt new_file.txt
,git add new_file.txt
.6 Stimmen
Jarl: Nein, ist es nicht. Wenn es auch Änderungen innerhalb der Datei gibt,
git mv
werden sie nicht in den Cache aufgenommen, sonderngit add
wird. Ich ziehe es vor, die Datei zurück zu verschieben, damit ich diegit mv
entoncesgit add -p
um meinen Änderungssatz zu überprüfen.0 Stimmen
Bitte prüfen Sie mein Skript github.com/Deathangel908/python-tricks/blob/master/
0 Stimmen
Mögliches Duplikat von Ist es möglich, Dateien in Git zu verschieben/umzubenennen und ihren Verlauf beizubehalten?
2 Stimmen
Git hat sich in den letzten 8 Jahren verbessert, wenn es nur um eine Datei geht, ist die beste Antwort stackoverflow.com/a/433142/459 nichts getan aber Sie können folgen stackoverflow.com/a/1541072/459 um aus einem rm/add einen mv/modify-Status zu machen.
0 Stimmen
Mit Git 2.18 (Q2 2018),
git status
sollte Ihnen nun die Umbenennungen anzeigen (statt Dateien zu löschen/hinzufügen). Siehe " Wie man Git mitteilt, dass es sich um dasselbe Verzeichnis handelt, nur mit einem anderen Namen ".0 Stimmen
Einziger Haken: Die Originaldatei darf nicht mehr existieren! Ein SQL-Vergleichstool, das ich verwende, behält die Originaldatei bei, macht sie aber 0 Byte groß. Dann sieht Git das offensichtlich nicht als Umbenennung an