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 mvplace.
> $ 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 newmet automatiquement à jour l'index. Lorsque vous renommez en dehors de Git, vous devrez faire le git add newet git rm oldpour mettre en scène les modifications de l'index. Une fois que vous avez fait cela, git statuscela 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 -aet les suppressions ont été validées mais maintenant je n'ai plus d'historique sur les fichiers qui y vivent public_htmlmaintenant. Ce flux de travail n'est pas aussi fluide que je le souhaiterais.
add+rmoumv- 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.