Introduzione
Quasi ogni sessione Git segue lo stesso ritmo a tre fasi: modifica i file nella tua working tree, metti in stage le modifiche che vuoi registrare e fai il commit nella storia. Padroneggiare questo ciclo è la base di tutto il resto.
Le tre aree
- Working tree: file su disco che modifichi con il tuo editor.
- Index (chiamato anche staging area): uno snapshot di ciò che andrà nel prossimo commit.
- Repository: la storia committata memorizzata in
.git.
Un ciclo completo
- Modifica un file nel tuo editor.
- Esegui
git statusper vedere cos'è cambiato. - Esegui
git diffper ispezionare le modifiche. - Metti in stage con
git add. - Fai commit con
git commit.
echo "hello" >> notes.txt
git status
git diff
git add notes.txt
git diff --staged
git commit -m "Add greeting to notes"
Stage selettivo
Puoi mettere in stage singoli file, pattern glob o anche parti di un file usando la modalità interattiva:
git add notes.txt readme.md
git add "src/*.py"
git add -p notes.txt # patch mode: yes/no per ogni hunk
La modalità patch è preziosa quando hai modifiche miste che vuoi dividere in commit separati.
Saltare l'index
La scorciatoia git commit -a mette in stage e committa tutti i file tracciati in un solo passo. Non aggiunge nuovi file (untracked):
git commit -am "Quick fix"
Scrivere buoni commit
Un messaggio di commit ha una riga oggetto breve (50 caratteri circa) e un corpo opzionale che spiega il perché. Esegui git commit senza -m per aprire l'editor:
git commit
# si apre l'editor
# Riga oggetto
#
# Spiegazione più lunga...
Commit atomici
Un buon commit cattura un cambiamento logico. Costruiscilo deliberatamente: metti in stage esattamente gli hunk che vanno insieme con git add -p, poi committa. Se ti ritrovi a descrivere un commit con "e" nell'oggetto ("Fix login and refactor logger"), probabilmente dovrebbe essere due commit.
git add -p src/auth.py # stage solo del fix di login
git commit -m "Fix login redirect on expired session"
git add -p src/logger.py
git commit -m "Refactor logger to use structured fields"
I commit atomici rendono git bisect, git revert e la code review enormemente più facili in seguito.
Errori comuni
Dimenticare il git add di nuovi file ed essere sorpresi da un commit "vuoto". git status dice sempre la verità; leggilo prima di committare. Un'altra trappola: usare git commit -am quando hai nuovi file untracked, che li lascia silenziosamente fuori. Infine, committare file generati (output di build, node_modules, impostazioni dell'IDE) ingombra la storia e rallenta i clone; aggiungili a .gitignore prima di metterli in stage. Nel dubbio, esegui git diff --staged per vedere esattamente cosa conterrà il prossimo commit.