Da Anonimo (non verificato) , 29 Aprile 2026

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

OpzioneDescrizione
-f, --forceSovrascrive la destinazione se esiste.
-kSalta azioni di move/rename che fallirebbero senza errore.
-n, --dry-runMostra cosa accadrebbe senza farlo.
-v, --verboseRiporta 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