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

  1. Sovrascriverà il ramo corrente in modo che punti al commit corretto
  2. Facoltativamente reimposterà la zona buffer in modo che sia conforme al commit specificato
  3. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *