Sinossi
git commit [-m <msg>] [-a] [--amend] [--no-verify] [-S]
Descrizione
Il comando git commit prende tutto ciò che è attualmente nella staging area e crea un nuovo oggetto commit nel repository. Un commit è uno snapshot immutabile contenente un tree (i contenuti dei file), uno o più puntatori parent, metadati di author e committer e un messaggio. I commit sono l'unità di storia in Git: i branch sono puntatori a commit, i merge producono commit con più parent, e i tag etichettano commit specifici.
Un buon messaggio di commit ha una riga oggetto breve (sotto i 50 caratteri), una riga vuota e un corpo opzionale che spiega il perché. Molti team usano conventional commit o altri sistemi di prefisso. L'opzione --amend modifica il commit più recente, utile per correggere typo nel messaggio o aver dimenticato di mettere in stage un file — ma non fare mai amend di un commit che è già stato pushato e condiviso.
Nell'uso quotidiano, git commit si integra con alias della shell, plugin dell'editor e CI. Gli utenti esperti aggiungono alias e wrapper che applicano convenzioni del team. Per il debug, ri-esegui con GIT_TRACE=1 per vedere le chiamate plumbing sottostanti. git commit --help apre la man page completa.
Capire come git commit interagisce con il modello dati di Git aiuta a prevedere i risultati. La maggior parte dei problemi deriva da: comportamento predefinito sorprendente, operazioni di rete parziali o riscrittura di storia condivisa.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-m <msg> | Usa il messaggio dato invece di aprire un editor. |
-a, --all | Mette automaticamente in stage modifiche e cancellazioni di file tracciati prima di committare. |
--amend | Sostituisce il commit più recente con uno nuovo. |
--no-verify | Salta gli hook pre-commit e commit-msg. |
-S, --gpg-sign | Firma con GPG il commit. |
--allow-empty | Permette un commit senza modifiche. |
--fixup=<commit> | Crea un commit fixup da usare con autosquash rebase. |
-v, --verbose | Mostra il diff nell'editor del messaggio di commit. |
Esempi
git commit -m "Fix off-by-one error in pagination"
# Commit veloce con un messaggio di una riga
git commit -am "Update README"
# Mette in stage modifiche tracciate e committa in un passo
git commit --amend -m "Better message"
# Riscrive il messaggio del commit più recente
git commit --fixup=abc123
# Crea un commit fixup da squashare durante il rebase
Errori comuni
Fare amend di un commit pubblicato e poi force-pushare riscrive la storia su cui altri possono aver basato lavoro, causando confusione. Fai amend solo di commit locali non condivisi. Un altro errore è committare con -a quando anche file untracked dovrebbero essere inclusi — -a ignora i nuovi file. Infine, non usare mai --no-verify solo per bypassare test che falliscono; correggi il test o il codice.
Comandi correlati
git add, git status, git log, git revert