Come funziona davvero Git Reset?? Spiegazione delle ripartenze soft, duro e misto

Contenuti

Logo Git

git reset è un potente comando che può modificare la cronologia del tuo repository Git e correggere gli errori che hai commesso. Nonostante questo, anche se il nome fa sembrare spaventoso il suo uso, in realtà è abbastanza semplice, quindi parliamo di come funziona.

Cos'è Git HEAD?

Prima di capire come funzionano i reset, dovremmo parlare di Git HEAD.

HEADes simplemente un alias para su compromiso de trabajo actual. Puoi pensarlo come la testa di un giradischi, dove la posizione determina quali dati vengono utilizzati. Se stai usando il master ramo, HEAD sarà l'ultimo commit su quel ramo.

Nonostante sia un alias per una conferma, HEAD in realtà non punta direttamente a un commit la maggior parte del tempo. Punta a un ramo e usa automaticamente l'ultimo commit. Puoi anche puntare direttamente a una conferma, que se conoce comoHEAD separada”, anche se non importa per git reset.

Come funziona Git Reset??

La cronologia dei commit di Git è memorizzata come albero di commit ed è destinata ad essere immutabile per la maggior parte. Nonostante questo, a volte è necessario modificare questa storia, ed ecco dove git reset entra in gioco.

Ogni commit è collegato al commit precedente, e può ramificarsi in diversi rami che alla fine si fonderanno di nuovo nel master rama. In ogni caso, HEAD in genere punterà all'ultimo commit su qualsiasi ramo su cui stai lavorando.

Quindi, Cosa succede quando prendi un impegno che vuoi annullare?

Bene, di fretta git reset Semplicemente, sposta indietro la TESTA e lascia tutti i commit di fronte ad essa sospesi. Questo riscrive la cronologia Git regolarmente immutabile per eliminare i commit davanti a HEAD.

Questo può essere molto utile per molte ragioni.. Forse hai fatto una conferma, poi hai apportato alcune modifiche aggiuntive e volevi spingere tutto come conferma. Potresti git reset tornare alla conferma precedente e poi ripetere la conferma correttamente.

O forse hai accidentalmente fatto un commit che includeva alcune modifiche che non volevi tenere traccia. Questo può essere molto difficile da capire se non sai come fare git reset Funziona, ma ripristinando la TESTA e quindi apportando le modifiche corrette si otterrà questo. Nota che questo è diverso da git revert, che ribalta le conferme.

IMPARENTATO: Come recuperare i commit annullati in un repository Git

Ci sono tre diversi tipi di riavvio in Git, e differiscono tutti in base a come gestiscono i commit lasciati in sospeso. Tutti riscrivono la storia di Git, e tutti spostano indietro la TESTA, ma trattano i cambiamenti in modo diverso:

  • git reset --soft, che manterrà i tuoi file e ripristinerà automaticamente tutte le modifiche.
  • git reset --hard, cosa sarà? distruggi completamente qualsiasi modifica e rimuovila dalla directory locale. Usalo solo se sai cosa stai facendo.
  • git reset --mixed, che è l'impostazione predefinita e mantiene tutti i file uguali ma destabilizza le modifiche. Questa è l'opzione più flessibile, ma nonostante il nome, non modifica i file.

La differenza tra liscio e misto è se le modifiche vengono apportate in più fasi o meno. Staged è semplicemente una zona intermedia tra la directory locale e la cronologia di Git. git add file di scena, e git commit scrivili alla storia. In ogni caso, la directory locale non è interessata, cambia semplicemente lo stato del tracciamento git di quelle modifiche.

Semplicemente, le ripartenze morbide e miste sono quasi le stesse e ti permettono di mantenere i cambiamenti, e i riavvii rigidi ripristineranno completamente la directory locale nel punto in cui si trovava al momento del commit.

Usando Git Reset

Una volta capito cosa sta succedendo, utilizzo git reset è incredibilmente facile. Resettare, avrai bisogno di un riferimento alla conferma a cui vuoi tornare. Puoi farlo funzionare reflog:

git reflog

Copia il codice a sette cifre a destra. Se solo fossi coinvolto in vim, premi Q, e magari corri git config --global core.editor "nano".

Dopo, può ripristinare la conferma della destinazione:

git reset --mixed a560612

Oppure puoi indirizzare i commit in base alla tua posizione in relazione a HEAD. Il seguente comando punta al commit appena prima di HEAD, che è un'abbreviazione utile se è necessario ripristinare l'ultimo commit:

git reset --mixed HEAD~

Se stai usando un client Git come Forchetta, restablecer es tan sencillo como hacer un clic con el botón derecho en la confirmación de destino y elegir “Ristabilire”:

¿Debería realizar un reinicio completo?

In realtà, solo debería utilizar restablecimientos suaves o mixtos, ma, si estropeó tanto su repositorio que necesita restablecerlo por completo, puede utilizar la próxima secuencia de comandos para restablecerlo totalmente a la normalidad.

git fetch origin
git checkout master
git reset --hard origin/master
git clean -d --force

Decisamente, siempre puede extraer el clásicoquitar su repositorio y volver a clonar desde Github”, ma in questo modo almeno Git viene approvato e ripristina solo un singolo ramo.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.