W3docs

git mv

Scopri il comando git mv per spostare o rinominare file in un repository Git mantenendoli in staging in un solo passaggio.

Il comando git mv sposta o rinomina un file o una directory già tracciata da Git e mette in staging la modifica in un solo passaggio. Questo capitolo spiega come rinominare un file, spostarlo in una directory, le opzioni più utili (-f, -n, -k) e le insidie — principalmente che git mv funziona solo su file già noti a Git e che Git non memorizza i rinominamenti come record.

Definizione

git mv è un wrapper di convenienza. Eseguirlo equivale a spostare il file manualmente, segnalare a Git che il vecchio percorso non esiste più con git rm e aggiungere il nuovo percorso con git add — tutto in una volta. Il vantaggio è che la working tree e la staging area non perdono mai la sincronizzazione, nemmeno per un istante.

Rinominare un file

Per rinominare un file tracciato, fornisci il vecchio nome e il nuovo nome:

git mv old-name.txt new-name.txt

Il file viene rinominato su disco e la modifica è già in staging, pronta per il commit. Un successivo git status mostra una voce di rinominamento pulita. La forma breve lo rende evidente — il flag R indica un rinominamento in staging:

git status --short
R  old-name.txt -> new-name.txt

Non resta che eseguire il commit della modifica con git commit.

Spostare un file in una directory

Fornisci una directory come destinazione per spostare un file senza rinominarlo:

git mv styles.css assets/

Puoi spostare più file in una directory con un solo comando, purché la destinazione sia una cartella esistente:

git mv main.css reset.css print.css assets/

Quando l'ultimo argomento è una directory esistente, tutti i percorsi precedenti vengono spostati al suo interno. Se la directory non esiste ancora, Git tratta l'ultimo argomento come un nuovo nome di file — quindi crea prima la cartella (con mkdir) quando intendi spostare file al suo interno.

Rinominare una directory

Passa una directory tracciata come sorgente per spostarla o rinominarla insieme a tutto il suo contenuto:

git mv src/ lib/

Git mette in staging un rinominamento per ogni file tracciato nella directory, quindi un singolo git mv può produrre molte voci renamed: in git status.

Cosa risparmia git mv

Senza git mv, lo stesso rinominamento richiede tre passaggi manuali:

mv old-name.txt new-name.txt
git rm old-name.txt
git add new-name.txt

git mv li riduce a uno solo e garantisce che la staging area rimanga coerente. Tieni presente che Git non memorizza effettivamente i rinominamenti — li rileva confrontando il contenuto dei file quando esegui git log o git diff. git mv rende semplicemente la modifica nella working tree ordinata e già in staging.

git mv funziona solo su file tracciati

git mv opera sui file già tracciati da Git. Puntarlo su un file non tracciato genera un errore:

git mv note.txt moved.txt
fatal: not under version control, source=note.txt, destination=moved.txt

Per un file mai visto da Git, rinominalo con il normale mv della shell e poi metti in staging il nuovo nome con git add. Usa git mv una volta che il file è stato committato.

Opzioni comuni

ComandoDescrizione
git mv <source> <destination>Rinomina o sposta un file tracciato e mette in staging la modifica.
git mv <source> <dir>/Sposta un file in una directory esistente.
git mv -f <source> <destination>Forza lo spostamento anche se la destinazione esiste già.
git mv -k <source> <destination>Salta gli spostamenti che causerebbero un errore anziché fallire.
git mv -n <source> <destination>Esecuzione a secco — mostra cosa accadrebbe senza eseguire nulla.

Quando la destinazione esiste già

Per impostazione predefinita Git si rifiuta di sovrascrivere un file esistente. Se intendi sostituirlo, aggiungi il flag force:

git mv -f draft.md final.md

Usa questa opzione con cautela, poiché elimina qualsiasi contenuto già presente nella destinazione.

Anteprima con un dry run

Prima di uno spostamento esteso, usa -n (o --dry-run) per vedere esattamente cosa farebbe Git — nulla viene rinominato e nulla viene messo in staging:

git mv -n old-name.txt new-name.txt
Checking rename of 'old-name.txt' to 'new-name.txt'
Renaming old-name.txt to new-name.txt

Combinalo con -v (verbose) per stampare ogni rinominamento nel momento in cui avviene durante uno spostamento reale.

Comandi correlati

  • git rm — rimuove file tracciati; git mv esegue un rm del vecchio percorso internamente.
  • git add — mette in staging le modifiche; git mv esegue l'equivalente add del nuovo percorso al posto tuo.
  • git status — conferma il rinominamento in staging prima del commit.
  • git commit — registra lo spostamento nella cronologia.
  • git log — visualizza i rinominamenti con git log --follow <file> per mantenere la cronologia di un file attraverso gli spostamenti.

Esercitazione

Pratica
Cosa fa 'git mv old.txt new.txt'?
Cosa fa 'git mv old.txt new.txt'?
Was this page helpful?