git add
Informazioni dettagliate sul comando git add, principi di funzionamento con esempi, opzioni comuni, modalità interattiva e modifica delle patch.
Descrizione
Il comando git add aggiunge le modifiche dalla directory di lavoro all'area di staging (chiamata anche index). Con esso, indichi a Git quali modifiche ai file vuoi includere nel prossimo commit. git add non salva nulla nella cronologia da solo — si limita a contrassegnare le modifiche come pronte. Per registrarle effettivamente, esegui git commit successivamente. Per ispezionare cosa è in staging rispetto a cosa non lo è in qualsiasi momento, usa git status.
Questa pagina spiega cosa fa git add, le tre "aree" di Git tra cui si colloca, le opzioni più utili e le modalità interattiva e di modifica delle patch per aggiungere le modifiche pezzo per pezzo.

Le tre aree
Ogni modifica in un progetto Git attraversa tre aree:
- Directory di lavoro — i file che modifichi effettivamente sul disco.
- Area di staging (index) — uno snapshot di ciò che andrà nel prossimo commit.
- Repository — la cronologia dei commit, scritta da git commit.
git add sposta le modifiche dalla directory di lavoro nell'area di staging. git commit poi scrive nel repository tutto ciò che è in staging. Questo flusso in due passaggi è ciò che ti permette di suddividere una directory di lavoro disordinata in commit puliti e mirati.
Perché aggiungere le modifiche all'area di staging?
In molti sistemi di controllo versione, il commit salva uno snapshot di tutto ciò che hai modificato. Git aggiunge deliberatamente l'area di staging nel mezzo, così puoi decidere esattamente cosa contiene ogni commit. Questo è utile quando hai modificato più cose non correlate contemporaneamente: puoi aggiungere all'area di staging e fare il commit di una modifica logica, poi aggiungere e fare il commit della successiva, mantenendo la cronologia leggibile.
Poiché lo staging cattura uno snapshot nel momento in cui lo esegui, git add deve essere eseguito di nuovo ogni volta che apporti ulteriori modifiche che vuoi includere. Se aggiungi un file all'area di staging e poi continui a modificarlo, le modifiche successive rimangono fuori dall'area di staging finché non esegui nuovamente git add.
Opzioni comuni
Aggiunge un singolo file al prossimo commit:
git add <file>Aggiunge tutte le modifiche all'interno di una directory (ricorsivamente, inclusi i nuovi file):
git add <directory>Aggiunge tutte le modifiche nell'intero repository — file nuovi, modificati ed eliminati:
git add -AAggiunge le modifiche ai soli file già tracciati, incluse le eliminazioni, ma ignora i file non tracciati di nuova creazione:
git add -uAggiunge le modifiche in modo interattivo, scegliendo porzioni di file hunk per hunk:
git add -pgit add . vs git add -A vs git add -u
Questi tre comandi si confondono facilmente, quindi vale la pena essere precisi:
| Comando | Nuovi file | File modificati | File eliminati | Ambito |
|---|---|---|---|---|
git add . | sì | sì | sì | directory corrente e sottodirectory |
git add -A | sì | sì | sì | intero repository |
git add -u | no | sì | sì | solo file tracciati |
Nel Git moderno, sia git add . che git add -A aggiungono le eliminazioni all'area di staging; la differenza riguarda solo l'ambito del percorso. Usa -u quando hai creato file temporanei che non vuoi committare e preferisci non elencarli in .gitignore.
Esempi di git add
Puoi eseguire questi comandi in qualsiasi repository Git. Inizia controllando lo stato corrente con git status, poi aggiungi all'area di staging e fai il commit.
Aggiungere un nuovo file all'area di staging
git add hello.pyAggiungere più file specifici contemporaneamente
git add hello.py utils.py README.mdAggiungere tutto all'area di staging, poi fare il commit con un messaggio
git add -A
git commit -m "Add greeting script"Verificare cosa è in staging prima del commit
git statusOn branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: hello.pyPer togliere un file dall'area di staging senza perdere le modifiche, usa git restore --staged (oppure, nelle versioni precedenti di Git, git reset):
git restore --staged hello.pyModalità interattiva
Eseguire git add -p (o scegliere l'opzione patch da git add -i) avvia una sessione di staging interattiva. Git mostra un hunk — un blocco di righe modificate — alla volta e chiede un comando. Le risposte più comuni sono:
y- aggiungi questo hunk all'area di stagingn- non aggiungere questo hunk all'area di stagingq- esci; non aggiungere questo hunk né i rimanentia- aggiungi questo hunk e tutti quelli successivi nel filed- non aggiungere questo hunk né quelli successivi nel fileg- seleziona un hunk a cui andare/- cerca un hunk che corrisponda all'espressione regolare fornitaj- lascia questo hunk in sospeso, vai al prossimo hunk in sospesoJ- lascia questo hunk in sospeso, vai al prossimo hunkk- lascia questo hunk in sospeso, vai al precedente hunk in sospesoK- lascia questo hunk in sospeso, vai al precedente hunks- suddividi l'hunk corrente in hunk più piccolie- modifica manualmente l'hunk corrente?- mostra la guida
La suddivisione (s) è particolarmente utile: se Git presenta due modifiche non correlate come un unico hunk, s le separa così puoi aggiungere all'area di staging solo la parte che desideri. Questo è il modo quotidiano per costruire un commit pulito da un file con modifiche miste.
Modifica delle patch
Chiamare git add -e o selezionare e dal selettore interattivo di chunk apre una patch nel tuo editor. Dopo aver chiuso l'editor, l'output viene applicato all'index. Puoi apportare modifiche arbitrarie alla patch, ma alcune modifiche possono produrre output complessi o persino rendere la patch inapplicabile. Se vuoi rifiutare completamente l'operazione, elimina semplicemente tutte le righe della patch. Ecco alcuni elementi comuni che potresti vedere in una patch e quali operazioni di modifica hanno senso per ciascuno.
Le righe che iniziano con + rappresentano contenuto aggiunto. Puoi eliminarle per impedire che le righe aggiunte vengano messe in staging.
Le righe che iniziano con - rappresentano contenuto rimosso. Per impedire che la loro eliminazione venga messa in staging, puoi convertire il - in uno spazio ( ).
Il contenuto modificato è mostrato con righe - (che eliminano il vecchio contenuto) seguite da righe + (che aggiungono il contenuto sostitutivo). Per impedire che la modifica venga messa in staging, converti le righe - in spazi e rimuovi le righe +. Nota che modificare solo metà della coppia può causare cambiamenti confusi all'index.
Errori comuni
- Lo staging è uno snapshot, non un collegamento live. Se esegui
git addsu un file e poi lo modifichi di nuovo, nell'area di staging c'è solo la versione precedente. Eseguigit addun'altra volta per includere le nuove modifiche — git status mostrerà lo stesso file sia in "Changes to be committed" che in "Changes not staged for commit." git addnon elimina file per te. Aggiunge all'area di staging le eliminazioni di file già tracciati (con-Ao-u), ma per eliminare un file dal disco e aggiungerne l'eliminazione all'area di staging in un solo passaggio, usa git rm.- I file ignorati restano ignorati. I pattern in
.gitignorenon vengono aggiunti all'area di staging dagit add .. Per forzare l'aggiunta di un file ignorato, usagit add -f <file>. - Niente è ancora definitivo. Lo staging è completamente reversibile. Usa
git restore --staged <file>per togliere un file dall'area di staging prima di fare commit.