Sinossi
git mv [-f] [-k] [-n] <source> <destination>
Descrizione
Il comando git mv rinomina o sposta un file tracciato e mette in stage la modifica. Internamente è equivalente a eseguire mv seguito da git add sul nuovo path e git rm sul vecchio. La comodità è che il rename avviene in un singolo passo atomico che è inequivocabilmente in stage.
Nota: Git non memorizza effettivamente i rename come operazioni di prima classe. Invece, rileva i rename confrontando la similarità del contenuto dei file al momento di diff e log. Quindi sia che usi git mv o un semplice mv + git add + git rm, il commit risultante è identico, e il rilevamento dei rename funziona allo stesso modo.
Nell'uso quotidiano, git mv si integra con alias, editor e CI. Per il debug usa GIT_TRACE=1.
Capire come git mv interagisce con il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-f, --force | Sovrascrive la destinazione se esiste. |
-k | Salta azioni di move/rename che fallirebbero senza errore. |
-n, --dry-run | Mostra cosa accadrebbe senza farlo. |
-v, --verbose | Riporta i nomi dei file spostati. |
Esempi
git mv old-name.txt new-name.txt
# Rinomina un file in un passo
git mv src/utils.js src/lib/utils.js
# Sposta un file in una nuova directory (deve già esistere)
git mv -n *.md docs/
# Anteprima dello spostamento di tutti i file markdown in docs/
git mv -f draft.md final.md
# Forza la sovrascrittura se final.md esiste già
Errori comuni
Se rinomini un file fuori da Git (con il tuo editor o mv), il rilevamento dei rename di Git solitamente funziona ancora al momento del diff — ma devi eseguire git add -A per mettere in stage sia la cancellazione che l'aggiunta. Un altro problema: i rename solo di case su filesystem case-insensitive (macOS, Windows) richiedono git mv -f o un rename in due passi attraverso un nome temporaneo.
Comandi correlati
git add, git rm, git log --follow