modulo 02 / lezione 06
Lavorare in solitario: i comandi quotidiani
git add e stage: scegliere cosa entra nel commit
Usare lo staging non come passaggio meccanico ma come strumento per costruire commit coerenti.
git add e stage: scegliere cosa entra nel commit
git add non significa semplicemente “salva questo file”. Significa: prendi la versione attuale di questa modifica e mettila nell’index, pronta per il prossimo commit.
Questa distinzione cambia il modo in cui lavori. Lo stage non è un casello obbligatorio prima del commit: è il banco di montaggio della storia.
Perché questa lezione conta
Un buon commit non coincide sempre con “tutto quello che ho modificato da stamattina”. Spesso durante lo stesso lavoro fai un fix, un refactor, una correzione di typo e un esperimento. Se committi tutto insieme, il futuro lettore vede una massa indistinta.
Usare bene lo stage ti permette di separare intenzioni diverse anche quando sono nate nello stesso file.
Obiettivo operativo
Alla fine della lezione devi saper scegliere cosa entra nel commit, usare git add -p e verificare lo stage prima di salvare la storia.
Le forme di git add
git add file.txt
Aggiunge allo stage la versione attuale di file.txt.
git add .
Aggiunge modifiche nella directory corrente e sotto-directory. Può comportarsi diversamente se lo lanci da una sottocartella.
git add -A
Aggiunge tutte le modifiche del repository: nuovi file, modifiche, cancellazioni.
git add -u
Aggiunge modifiche e cancellazioni di file già tracciati, ma non nuovi file.
La scelta non è estetica. Se usi sempre git add -A, devi essere ancora più disciplinato nel leggere git diff --staged.
git add -p
Il comando più importante della lezione:
git add -p
Git ti mostra hunk, cioè blocchi di modifica, e ti chiede cosa fare:
y stage this hunk
n do not stage this hunk
s split this hunk
e edit this hunk manually
q quit
s è utile quando Git ha raggruppato modifiche diverse nello stesso hunk. e è potente ma richiede attenzione: modifichi manualmente la patch da staged.
Scenario realistico
Hai modificato checkout.ts:
- fix reale: impedire doppio submit;
- refactor: rinominare variabili per chiarezza;
- debug temporaneo:
console.log.
Un commit buono potrebbe essere solo il fix. Il refactor può stare in un commit separato. Il console.log non deve entrare.
Workflow:
git diff
git add -p checkout.ts
git diff --staged
git commit -m "fix(checkout): evita doppio submit"
git diff
Dopo il commit, git diff ti mostra cosa è rimasto fuori. Non è un errore: è lavoro ancora non salvato nella storia.
Stage come review personale
Prima di ogni commit, lo stage dovrebbe rispondere a una domanda:
Questo diff racconta una modifica sola?
Se la risposta è no, hai tre opzioni:
- separare con
git add -p; - fare due commit;
- tornare al codice e separare meglio il lavoro.
Non serve una purezza estrema, ma i commit dovrebbero essere abbastanza piccoli da poter essere revertiti, recensiti e compresi.
File nuovi e cancellazioni
git add -p lavora bene sui file modificati. Per file nuovi, spesso serve aggiungerli interi:
git add src/new-file.ts
Per cancellazioni:
git add deleted-file.ts
oppure:
git add -A
Poi controlla:
git status
git diff --staged --stat
git diff --staged
Laboratorio guidato
Crea un file con tre modifiche:
- un bugfix;
- un refactor;
- un commento temporaneo.
Usa git add -p per staged solo il bugfix. Poi:
- leggi
git diff --staged; - fai commit;
- verifica che refactor e commento siano ancora fuori;
- crea un secondo commit solo per il refactor;
- scarta il commento temporaneo.
Output atteso
Due commit puliti:
fix(...): ...
refactor(...): ...
e nessun file temporaneo nello stage.
Errori comuni
Usare git add . senza diff. È il modo più rapido per committare file sbagliati.
Confondere staged e committed. Lo stage è ancora modificabile.
Fare commit misti. Un commit con bugfix, refactor e formattazione insieme sarà difficile da revieware.
Ignorare i file nuovi. I file untracked non entrano nel commit finché non li aggiungi esplicitamente.
Checklist di verifica
- so spiegare la differenza tra
git add .,git add -Aegit add -u; - so usare
git add -p; - leggo sempre
git diff --stagedprima del commit; - so lasciare fuori lavoro non pronto senza perderlo;
- ogni commit ha una sola intenzione principale.
Collegamenti
- Modulo: Lavorare in solitario: i comandi quotidiani — lezione 6 del corso.
- Si appoggia al modello working tree/index/repository della lezione 2.