Amending in Git

Nell’ultimo update di Visual Studio (Update 2 ora in RC) il supporto a Git continua ad evolversi, portando direttamente nella UI altre operazioni che erano appannaggio della Command Line. Debbo dire che una volta imparato Git la Command Line rimane sempre la vostra piu cara amica, perchè vi darà sempre pieno accesso a tutte le funzionalità, ma avere molte opzioni anche nella UI è comodo nell’ottica di integrare Git in team che vengono da un Source Control centralizzato e per i quali la command line potrebbe essere un esperienza Traumatica :).

Una funzionalità molto interessante di Git va sotto il nome di “amending” e serve per modificare l’ultimo commit. Di base effettuando un commit con l’opzione –amend, invece di creare un nuovo commit, Git aggiunge i cambiamenti presenti nella staging area al commit precedente. I casi d’uso sono

*) Volete cambiare il messaggio dell’ultimo commit
*) Avete dimenticato di includere un file nell’ultimo commit
*) Dopo avere committato avete delle leggere modifiche da fare ad un file ma non volete creare un nuovo commit

ATTENZIONE: MAI e dico MAI fare un amend di un commit di cui si sia già effettuato il push su uno dei remote. In questo modo il vostro team si troverà a fronteggiare anomalie veramente fastidiose da risolvere.

Effettuare un amend dalla UI di Visual Studio è ora possibile, supponiamo di avere questa situazione, ho fatto un commit, ma dopo averlo fatto, mi rendo conto che avrei dovuto aggiungere anche un’altra modifica. A questo punto io posso fare la modifica mancante, supponiamo al file SqlStatements.cs. e poi andare nella finestra Changes.

2014-04-06_09-24-42

Come potete vedere nella figura sopra, nella finestra changes ho ancora il messaggio “Commit 0d3266b0 create locally” che rappresenta il commit precedente. Il file SqlStatement è correttamente segnato come modificato perché ho appunto fatto le modifiche che avrei voluto includere nel precedente commit. Ho inserito un nuovo commento chiamato “This is the right commit” e sarei quindi pronto per fare un altro commit. La situazione è chiaramente visibile anche da riga di comando

2014-04-06_09-25-21

Ora nel menu Actions, è presente una nuova voce di menu chiamata appunto “Amend” che vi permette di fare un commit in “rettifica”. Questo significa che le nuove modifiche (in questo caso il file SqlStatement.cs”) vengono aggiunte a quelle del commit precedente ed il commento viene sostituito. Al termine dell’amend questa è la situazione.

2014-04-06_09-25-29 

Da qui potete chiaramente vedere che il commit precedente è scomparso ed è stato sostituito da un nuovo commit che comprende tutte le modifiche di quello “amendato” più tutte quelle messe in amend. Come potete vedere il vecchio commit è scomparso, questo significa che la storia del vostro repository locale è stata “riscritta” e questa è la ragione per cui NON DOVETE MAI EFFETTUARE AMEND SU COMMIT DI CUI AVETE GIA’ FATTO PUSH, ALTRIMENTI RISCRIVETE LA STORIA PER TUTTI CAUSANDO NUMEROSI PROBLEMI.

Fortunatamente la UI di Visual Studio previene questo, quindi quando tentate di fare un amend di un commit di cui avete già fatto il push ottenete errore. Purtroppo il messaggio è poco significativo, ma per lo meno non correte il rischio di fare confusione.

2014-04-06_09-35-45

E’ anche possibile effettuare l’amend del solo messaggio di commento del commit. Il messaggio di commit è fondamentale e deve essere significativo, per cui se ci si rende conto che il messaggio non è stato messo correttamente è possibile cambiarlo. Per fare questo si può andare nella “Unsynced Commits”, da li verificare che l’ultimo commit sia ancora in Outgoing (ricordate vero che non potete fare amend di un commit di cui avete già fatto push? :) )

image

A questo punto fate doppio click su di lui per vederne il dettaglio, e da li se cambiate il Commit Message vi verrà abilitata la voce di menu “amend Message”. Chiaramente questo vale solamente per l’ultimo commit, ovvero non potete (dalla UI) cambiare il messaggio di commit di un altro commit tranne l’ultimo.

image

Buon lavoro “distribuito” Smile

Gian Maria Ricci

Comments are closed.