Ich habe gelesen, dass Sie beim Umbenennen von Dateien in Git alle Änderungen festschreiben, Ihre Umbenennung durchführen und dann Ihre umbenannte Datei bereitstellen sollten. Git erkennt die Datei anhand des Inhalts, anstatt sie als neue nicht verfolgte Datei zu betrachten, und behält den Änderungsverlauf bei.
Als ich heute Abend genau das tat, kehrte ich jedoch zurück git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Benennen Sie mein Stylesheet im Finder von iphone.css
nach ummobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Git glaubt nun, ich hätte eine CSS-Datei gelöscht und eine neue hinzugefügt. Nicht was ich will, lass uns die Umbenennung rückgängig machen und git die Arbeit machen lassen.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Zurück zu meinem Ausgangspunkt.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Verwenden wir git mv
stattdessen.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Sieht so aus, als wären wir gut. Warum hat git die Umbenennung beim ersten Mal nicht erkannt, als ich Finder verwendet habe?
git mv old new
aktualisiert den Index automatisch. Wenn Sie außerhalb von Git umbenennen, müssen Sie das git add new
und git rm old
die Änderungen am Index vornehmen. Sobald Sie dies getan haben, wird dies git status
wie erwartet funktionieren.
public_html
Verzeichnis verschoben , die in Git verfolgt werden. Nach der Ausführung git add .
und git commit
zeigte es immer noch eine Reihe von 'gelöschten' Dateien in git status
. Ich habe a ausgeführt git commit -a
und die Löschungen wurden festgeschrieben, aber jetzt habe ich keinen Verlauf für die Dateien, in denen public_html
jetzt leben . Dieser Arbeitsablauf ist nicht so reibungslos, wie ich es gerne hätte.
add+rm
odermv
- es wird das gleiche Ergebnis erzielt. Git verwendet dann die Umbenennungs- / Kopiererkennung, um Sie darüber zu informieren, dass es sich um eine Umbenennung handelt. Die von Ihnen angegebene Quelle ist ebenfalls ungenau. Es ist wirklich egal, ob Sie im selben Commit + umbenennen oder nicht. Wenn Sie einen Unterschied zwischen Ändern und Umbenennen vornehmen, wird dies bei der Umbenennungserkennung als Umbenennen + Ändern angezeigt. Wenn es sich bei der Änderung um eine vollständige Umschreibung handelt, wird sie als hinzugefügt und gelöscht angezeigt - unabhängig davon, wie Sie sie ausgeführt haben es.