17. Rimozione di un commit da un ramo
Obiettivi
- Imparare a eliminare gli ultimi commit del ramo
Revert
è un potente comando della sezione precedente che ti consente di annullare qualsiasi commit nel repository. Tuttavia, sia i commit originali che quelli annullati sono visibili nella cronologia del ramo (quando si utilizza il comando git log
).
Spesso dopo che è già stato effettuato un commit, ci rendiamo conto che è stato un errore. Sarebbe bello avere un comando di annullamento che consente di eliminare immediatamente i commit errati. Questo comando impedirebbe la comparsa di uno o più commit indesiderati nella cronologia git log
.
01 Il comando reset
Abbiamo già utilizzato il comando reset
per abbinare la zona buffer e il commit selezionato (il commit HEAD è stato utilizzato nella lezione precedente).
Quando viene fornito un riferimento di commit (ad esempio, un nome di ramo, hash o tag), il reset
…
- Sovrascriverà il ramo corrente in modo che punti al commit corretto
- Facoltativamente reimposterà la zona buffer in modo che sia conforme al commit specificato
- Facoltativamente reimposta la directory di lavoro in modo che corrisponda al commit specificato
02 Controlla la nostra cronologia
Facciamo una rapida scansione della nostra cronologia dei commit .
Esegui:
git hist
Risultato:
Vediamo che gli ultimi due commit in questo ramo sono “Oops “e” Revert Oops “. Rimuoviamoli con il comando reset
.
03 Contrassegna prima questo ramo
Contrassegniamo lultimo commit con tag, so you can find it after removing a commit(s).
Esegui:
git tag oops
04 Reimposta commit al precedente Oops
In nel log della cronologia sopra, il commit contrassegnato con “v1” è prima dei commit “Oops” e “Revert Oops”. Resettiamo il ramo a quel punto. Poiché il ramo ha un tag, possiamo usare il nome del tag nel comando reset (se non ha un tag, possiamo usare il valore hash).
Esegui:
git reset --hard v1git hist
Risultato:
Il nostro ramo principale punta al commit v1 e i commit “Revert Oops” e “Oops” non esistono più nel branch. Il parametro --hard
fa in modo che la directory di lavoro rifletta la nuova testa del ramo.
05 Niente è mai perduto
Cosa è successo ai commit sbagliati? Sono ancora nel repository. In realtà, possiamo ancora fare riferimento a loro. Allinizio della lezione, abbiamo creato il tag “oops” per il commit annullato. Diamo uno sguardo a tutti i commit.
Esegui:
git hist --all
Risultato:
Lo possiamo vedere i commit sbagliati non sono andati. Non sono più elencati nel ramo principale ma rimangono ancora nel repository. Sarebbero ancora nel repository se non li etichettassimo, ma poi potremmo fare riferimento a loro solo con i loro nomi hash. I commit senza riferimenti rimangono nel repository fino a quando il software di garbage collection non viene eseguito dal sistema.
06 Reset pericoli
I reset sui rami locali sono generalmente innocui. Le conseguenze di qualsiasi “incidente” possono essere annullate utilizzando il commit appropriato.
Tuttavia, gli altri utenti che condividono il ramo possono essere confusi se il ramo è condiviso su repository remoti.