Stanco di cronologie di commit disordinate che ingombrano i repository Git e le richieste pull? Fortunatamente, Git ha la capacità di “squash commit”, che unisce più piccoli commit in uno solo. Questo aiuta a mantenere pulita e organizzata la cronologia del codice ed è facile da eseguire con pochi comandi.
Perché Squash Commit? Una delle regole d’oro della buona etichetta Git è quella di impegnarsi spesso con buoni messaggi che spiegano cosa fanno i commit. Tuttavia, questo può rapidamente diventare un problema se vengono inviati troppi commit. Dopotutto, nessuno vuole rivedere una richiesta pull con 40 diversi commit, tutti pronti per essere uniti in master: è semplicemente troppa confusione.
Quindi, prima di passare a un repository remoto come GitHub, è buona norma farlo schiacciare quei commit, che li uniranno tutti in un unico grande commit. Tutti i messaggi di commit di tali commit verranno aggiunti allo “squash commit” in modo che siano ancora tutti visibili quando vai a inviarli a GitHub o invii la tua richiesta pull.
Inoltre, non è sempre necessario schiacciare ogni commit, poiché a volte è utile dividere le cose se stai lavorando su più file o parti diverse del repository. Tuttavia, se stai solo apportando più modifiche a un singolo file nel tempo, dovresti probabilmente schiacciare quei commit.
È importante notare che non puoi schiacciare i commit già inviati a GitHub senza forzare la spinta, che è un’operazione distruttiva. Lo schiacciamento dei commit sovrascrive la cronologia di Git, il che va bene se lo fai solo sul tuo computer locale. Se lo stai facendo su GitHub, richiede un push forzato, il che significa che tutti i membri del tuo team devono clonare nuovamente il repository per evitare conflitti.
Per evitare questi problemi, è meglio schiacciare i commit prima di eseguire il push al repository remoto. Poiché questo è di solito quando vorresti farlo comunque, di solito non è un problema.
Squashing Git Commit con git merge Ci sono un paio di modi diversi per schiacciare i commit, dal momento che non esiste un “git squash” comando. Uno dei più semplici è l’utilizzo git merge con il –squash bandiera. Questa tecnica unirà gli ultimi N commit insieme in uno solo.
Innanzitutto, assicurati che il tuo repository sia completamente pulito, senza modifiche attive. Puoi controllare git status per verificare di non avere modifiche locali che verrebbero eliminate dal ripristino.
Successivamente, ti consigliamo di reimpostare il ramo nella posizione in cui si trovava Prima uno qualsiasi dei commit che vorresti schiacciare insieme. Ad esempio, per schiacciare gli ultimi tre commit, dovresti usare HEAD~3che è tecnicamente il quarto commit nella cronologia, ma rimuoverà tutti e tre i commit eliminabili dalla cronologia.
git reset –hard HEAD~3 Puoi anche utilizzare un hash SHA-1 di commit per fare riferimento direttamente a un commit. Successivamente, corriamo git merge –squashcon la destinazione di unione essendo HEAD@{1}che è la posizione di HEAD prima dell’ultimo comando.
git merge –squash ‘HEAD@{1}’ Git ha già messo in scena tutte le modifiche con il messaggio di commit appropriato a questo punto, ma deve essere eseguito il commit:
git commit
Una volta fatto, sei libero di inviare tutti i commit al tuo repository di sorgenti upstream.
Maggiore controllo sullo schiacciamento con Rebase interattivo Se non vuoi schiacciare tutto in un bit di commit, puoi eseguire un rebase interattivo per selezionare solo i commit che vuoi schiacciare. Il rebasing può essere complicato, ma è facile da eseguire con i passaggi giusti.
Innanzitutto, avvia il rebase interattivo indirizzando il commit prima dell’ultimo commit schiacciabile:
git rebase -i HEAD~3 Questo aprirà un editor di testo, dove vorrai cambiare “pick” in “squash” per ogni commit che vorresti unire.
Git aprirà quindi un altro editor, permettendoti di creare un nuovo messaggio di commit per il commit combinato. Salva questo e il rebase dovrebbe finire.
Ribasare in questo modo unirà tutti i commit schiacciati nel commit successivo sopra di essi. In questo caso, il secondo e il terzo commit sono stati fusi nel primo.
Squashing Git Commit con una GUI Git Come la maggior parte delle azioni in Git, schiacciare i commit con un’interfaccia è molto più facile che ricordare e digitare i comandi ogni volta. Infatti, in GitKraken, puoi semplicemente fare clic tenendo premuto il tasto Ctrl sui commit che desideri schiacciare e fare clic con il pulsante destro del mouse per premere “Squash 2 commits”:
Puoi leggi la nostra guida sui client GUI Git per saperne di più.
IMPARENTATO: Dovresti usare un client Git GUI?