GIT - 2 - checkout, revert, reset

git

Nel precedente articolo abbiamo visto i comandi basilari per lavorare con git. In questo articolo vediamo come ripristinare stati precedenti del progetto.
Ci sono diversi modi con caratteristiche diverse.

Prima di cominciare è utile introdurre il comando di log:

git log --oneline

è un comando che ci dà la storia dei commit fatti in precedenza. Accanto a ogni messaggio di commit c'è un codice alfanumerico che rappresenta l'abbreviazione del codice hash che identifica il commit e che sarà utile per identificare lo stato a cui vogliamo ritornare.
Il comando di log ha un sacco di parametri che permettono di personalizzare le informazioni da visualizzare nel log. Per vederle tutte andate qua.

Passiamo ora ai comandi veri e propri.

CHECKOUT

Il checkout è un comando che ha molteplici utilizzi. Un uso fondamentale, che vedremo nei tutorial successivi, lo ha quando si lavora con le branch. In questo contesto può essere utilizzato in altri modi.
Uno di questi è quando siamo a modificare dei file all'interno della nostra directory locale e vogliamo tornare all'ultimo commit fatto. Niente di più facile!

git checkout HEAD .

Il punto in fondo al comando sta a indicare che si vogliono ripristinare tutti i file del progetto. Si può anche specificare un singolo file sostituendo, al posto del punto, il suo nome.

A volte però è necessario ripristinare un file che risale a diversi commit precedenti. Per fare questo normalmente si lancia il comando git log dal quale copiamo il codice hash del commit di interesse e poi lanciamo da terminale:

git chekcout <commit> -- <file>

dove <commit> rappresenta il codice hash del commit e <file> il nome del file. In questo modo il file viene riportato alla versione in cui era al commit specificato. Quando ciò viene fatto, il file è già in fase di stage (è già aggiunto) e necessita quindi di essere committato.

Cosa succede se non si specifica il file nel comando precedente? La working directory tornerà tutta allo stato del commit indicato ma, a differenza del caso precedente, questa è una operazione di sola lettura e non sarà quindi possibile fare un commit sulle modifiche che si apportano in questa versione. Per ritornare all'ultimo commit basterà lanciare

git chekcout master

REVERT

Cavolo! In un commit ho tolto una funzione che ora mi serviva. Come faccio? Revert! Revert è un comando che permette di annullare le modifiche fatte in un determinato commit. Attenzione! Questo non vuol dire che tutte le modifiche fatte con i commit successivi andranno persi. Il revert permette proprio di annullare le modifiche di un determinato commit sullo stato attuale del progetto.
Il comando è semplicemente:

git revert <commit>

dove, come prima, <commit> è il codice hash (abbreviato o completo) relativo al commit di interesse. Quando si lancia questo comando viene fatto in automatico un commit. Si apre un file di testo nel quale vi chiede di mettere il message del commit. Se lasciate quello predefinito sarà del tipo Revert "<messaggio del commit su cui si è fatto revert>".

RESET

Passiamo ora al reset. Ci sono tre tipi di reset:

  • Soft reset
  • Mixed reset
  • Hard reset

Il comando è:

git reset <mode> <commit>

dove <mode> è rispettivamente ai tre tipi di reset --soft, --mixed (in realtà non necessario perché è quello di default) e --hard.

Per comodità ipotizziamo di avere un progetto su cui si sono fatti quattro commit in ordine: c0, c1, c2, c3. Attualmente siamo su c3 e vogliamo resettare su c1.

Soft reset

Con questo tipo di reset si torna indietro nella hisotry a c1 (facendo git log vedremo solo c0 e c1) lasciando però invariati i file nella working directory. Questo vuol dire che una volta lanciato il comando, i file non avranno subito alcuna modifica e se lanciamo git status noteremo che i file sono già in fase di stage (è già stato fatto l'add). Questo tipo di reset non è molto usato e normalmente serve per accorpare più commit in uno. Facendo un commit, infatti, c2 e c3 vengono raggruppati in un unico commit.

Mixed reset

Con questo tipo di reset si torna indietro nella history a c1 laciando invariati anche qui i file nella working directory. A differenza del soft però, in fase di stage c'è la versione c1.

Hard reset

Il più pericoloso di tutti quindi state attenti a come lo usate. Questo tipo di reset fa un vero e proprio undo e riporta il progetto come se fosse appena stato fatto il commit c1. Tutte le modifiche che sono state fatto con c2 e c3 verranno perse per sempre.

.
.
Per oggi è tutto!
Prossimamente parleremo del branching e su come lavorare in team.
Stay tuned!

Ingegnere Informatico e Ricercatore se compiace al Prodigioso Spaghetto Volante. Sono uno spartan racer, massimo esperto di serie tv, fotografo amatoriale e appena ne ho l’occasione preparo la valigia e parto

GIT - 2 - checkout, revert, reset ultima modifica: 2016-05-17T15:28:49+01:00 da Andrea Salvi


Advertisment ad adsense adlogger