Je lirais que lorsque vous renommez des fichiers dans git , vous devez valider toutes les modifications, effectuer votre renommage, puis mettre en scène votre fichier renommé. Git reconnaîtra le fichier à partir du contenu, plutôt que de le voir comme un nouveau fichier non suivi, et conservera l'historique des modifications.
Cependant, en faisant juste ce soir, j'ai fini par revenir git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Renommer ma feuille de style dans le Finder de iphone.css
àmobile.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 pense maintenant que j'ai supprimé un fichier CSS et en ai ajouté un nouveau. Pas ce que je veux, permet d'annuler le changement de nom et de laisser git faire le travail.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Retour là où j'ai commencé.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Permet d'utiliser à la git mv
place.
> $ 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
#
On dirait que nous sommes bons. Alors pourquoi git n'a-t-il pas reconnu le changement de nom la première fois quand j'ai utilisé le Finder?
git mv old new
met automatiquement à jour l'index. Lorsque vous renommez en dehors de Git, vous devrez faire le git add new
et git rm old
pour mettre en scène les modifications de l'index. Une fois que vous avez fait cela, git status
cela fonctionnera comme prévu.
public_html
, qui sont suivis dans git. Après avoir joué git add .
et git commit
, il montrait toujours un tas de fichiers «supprimés» dans git status
. J'ai effectué un git commit -a
et les suppressions ont été validées mais maintenant je n'ai plus d'historique sur les fichiers qui y vivent public_html
maintenant. Ce flux de travail n'est pas aussi fluide que je le souhaiterais.
add+rm
oumv
- il produit le même résultat. Git utilise ensuite sa détection de renommer / copier pour vous faire savoir qu'il s'agissait d'un renommage. La source que vous avez citée est également inexacte. Peu importe que vous modifiiez + renommer dans le même commit ou non. Lorsque vous effectuez un diff à la fois sur la modification et le changement de nom, la détection de changement de nom le verra comme un changement de nom + modification, ou si la modification est une réécriture totale, elle s'affichera comme ajoutée et supprimée - peu importe comment vous avez effectué il.