Articolo originale: https://www.freecodecamp.org/news/git-commit-command-explained/

Il comando git commit salverà all'interno del repository locale tutte le modifiche presenti nell'area di stage, oltre a una breve descrizione inserita dall'utente .

I commit sono al centro dell'utilizzo di Git. Puoi pensare a un commit come un'istantanea del tuo progetto, in cui una sua nuova versione viene creata nel repository corrente. Due importanti caratteristiche dei commit sono:

  • è possibile recuperare la modifiche inserite in un commit successivamente, oppure riportare il progetto a una versione referenziata da un certo commit (vedi Git checkout)
  • se più commit modificano diverse parti del progetto, non si sovrascrivono anche se gli autori del commit non sono consapevoli l'uno dell'altro. Questo è uno dei vantaggi dell'utilizzo di Git rispetto a strumenti come Dropbox o Google Drive.

Opzioni

Esistono diverse opzioni che puoi includere con git commit. Tuttavia, questa guida coprirà solo le due opzioni più comuni. Per un elenco più esaustivo di opzioni, consulta la documentazione di GIT.

L'Opzione -m

L'opzione -m è quella più comune usata con git commit. La -m sta per messaggio. Quando si chiama git commit, occorre includere un messaggio. Il messaggio dovrebbe essere una breve descrizione delle modifiche comprese nel commit. Il messaggio dovrebbe essere alla fine del comando e deve essere racchiuso tra virgolette " ".

Un esempio di come usare l'opzione -m :

git commit -m "Il mio messaggio"

Il risultato nel tuo terminale dovrebbe essere circa questo:

[master 13vc6b2] Il mio messaggio
 1 file changed, 1 insertion(+)

NOTA: Se l'opzione -m non è stata passata al comando git commit, ti verrà presentata la richiesta di aggiungere un messaggio usando il tuo editor di testo predefinito – vedi "Usare messaggi di commit dettagliati" qui sotto.

L'Opzione -a

Un'altra popolare opzione è -a. La -a sta per all (tutto). Questa opzione fa sì che tutti i file modificati siano passati all'area di stage per il commit. Tuttavia se ci sono nuovi file non tracciati, con l'opzione -a non verranno considerati, in quanto sono soggetti all'azione di commit solo i file noti al repository Git.

Per esempio:

Diciamo che hai un file README.md che è già stato incluso in un commit al tuo repository. Se apporti modifiche a questo file, puoi usare l'opzione -a nel comando di commit per aggiungere le modifiche al tuo repository. Tuttavia, cosa succede se hai anche creato un nuovo file chiamatoindex.html che non hai ancora aggiunto al repository? L'opzione -a non lo porterà nell'area di stage, in quanto non esiste nel repository. Quando vengono aggiunti nuovi file, si dovrebbe usare il comando git add per passare i nuovi file nell'area di stage affinché possano essere successivamente soggetti all'azione di commit.

Un esempio di come usare l'opzione -a:

git commit -am “Le mie nuove modifiche”

Il risultato nel tuo terminale dovrebbe essere circa questo:

[master 22gc8v1] Le mie nuove modifiche
 1 file changed, 1 insertion(+)

Usare messaggi di commit dettagliati

Anche se git commit -m "messaggio di commit" va bene, può essere utile fornire informazioni più dettagliate e sistematiche.

Se l'azione di commit viene eseguita senza l'opzione -m, git aprirà il tuo editor di testo predefinito con un nuovo file, che include come commento un elenco di tutti i file/modifiche che saranno soggetti al commit. Poi puoi inserire il tuo messaggio di commit dettagliato (la prima riga viene considerata come oggetto del messaggio) e il commit verrà eseguito quando salvi/chiudi il file.

Ricorda che:

  • È una pratica standard mantenere la lunghezza di ciascuna riga del messaggio di commit entro i 72 caratteri.
  • Va benissimo, ed è addirittura consigliato, scrivere messaggi di commit su più righe.
  • Puoi anche fare riferimento ad altre issue (problemi) o pull request (richieste di modifica) nel tuo messaggio di commit. GitHub alloca un numero di riferimento per tutte le issue e pull request. Quindi, se per esempio vuoi fare riferimento alla pull request #788, lo puoi fare sia nella riga di oggetto che nel corpo del messaggio.

L'opzione —amend

L'opzione --amend ti consente di modificare il tuo ultimo commit. Diciamo che hai appena eseguito un commit e ti accorgi di un errore nel messaggio che hai inserito. Puoi comodamente modificare il commit più recente usando il comando:

git commit --amend -m "un messaggio di commit aggiornato"

Se ti sei dimenticato di includere un file nel commit:

git add NOME-FILE-DIMENTICATO
git commit --amend -m "un messaggio di commit aggiornato"

# Se non devi cambiare il messaggio di commit, usa l'opzione --no-edit
git add NOME-FILE-DIMENTICATO
git commit --amend --no-edit

I commit prematuri avvengono continuamente nel corso del tuo sviluppo quotidiano. È facile dimenticare di passare un file all'area di stage o come formattare correttamente il tuo messaggio di commit. L'opzione --amend è un modo conveniente per correggere questi errori minori. Questo comando sostituirà il vecchio messaggio di commit con quello aggiornato specificato nel comando.

I commit modificati con l'opzione --amend sono in realtà commit nuovi e il commit precedente non sarà più nel tuo branch corrente. Quando lavori assieme ad altri, dovresti cercare di evitare di modificare un commit se quest'ultimo è già stato inviato al repository remoto.

Con --amend, una delle altre opzioni più utili che potresti usare è --author che ti consente di modificare l'autore dell'ultimo commit che hai eseguito. Immagina una situazione nella quale non hai propriamente impostato il tuo nome o email nella configurazione di git, ma hai già eseguito un commit. Con l'opzione --author puoi semplicemente modificarli senza resettare l'ultimo commit.

git commit --amend --author="John Doe <johndoe@email.com>"

L'opzione -v oppure —verbose

L'opzione -v oppure--verbose viene usata senza l'opzione -m e può essere utile quando vuoi inserire un messaggio di commit con il tuo editor testi predefinito ed essere in grado di vedere le modifiche che hai effettuato per questo commit. Il comando apre il tuo editor di testo predefinito con un modello di messaggio di commit assieme a una copia delle modifiche effettuate per questo commit. Le modifiche, o diff, non saranno incluse nel messaggio di commit ma ti offrono un buon metodo per fare riferimento alle tue modifiche mentre le descrivi nel messaggio di commit.

Come raggruppare più commit in uno

Questa è una caratteristica fantastica di rebase che può essere utilizzata in modalità interattiva. Per raggruppare gli ultimi n commit in uno, esegui il comando seguente:

git rebase -i HEAD~n

Questo farà aprire l'editor di testo con un contenuto simile al seguente:

pick commit_1
pick commit_2
pick commit_3
...
pick commit_n
# Alcuni commenti

Lascia da parte il primo commit, e per i restanti commit che vuoi raggruppare modifica il corrispondente testo da pick a squash. Salva ed esci dall'editor.

Per esempio se avessi voluto raggruppare gli ultimi tre commit, avresti prima eseguito git rebase -i HEAD~3 quindi avresti modificato i tuoi commit in questo modo:

pick dd661ba Commit 1
squash 71f5fee Commit 2
squash f4b4bf1 Commit 3

Se hai già inviato i commit a un repository remoto prima di raggrupparli, li devi nuovamente inviare al remoto, con l'opzione -f , altrimenti git darà un errore.

È fortemente consigliato che tu legga le informazioni inserite nel file aperto nell'editor in quanto ci sono parecchie cose che potresti fare.

Ulteriori Informazioni: