Vuoi sapere come il Git reset
opzione funziona?
In una serie di corsi Git su Envato Tuts +, ho esaminato alcuni dei concetti fondamentali di Git in video semplici.
In questo video della serie, imparerai tutto sul ripristino di Git. Vedrai come utilizzare ogni tipo di reset e come queste varietà interagiscono con i tre alberi Git:
Ti mostrerò anche come usare git reset
su singoli file.
Ripristino Git. Che cosa fa? È come annullare alcune modifiche che sono locali al tuo computer. Quando hai fatto del lavoro che devi riavvolgere, resettare è tuo amico. Puoi semplicemente ricominciare. Puoi saltare avanti e indietro tra i contenuti di vari commit e fare un po 'di tempo viaggiando.
Hai alcune opzioni a tua disposizione con git reset. Puoi andare duro, morbido e misto, e puoi anche utilizzare e mantenere gli oggetti commit o farlo a livello di singolo file.
Ognuna di queste tre variazioni influisce su alberi specifici che git usa per gestire i tuoi file e il loro contenuto.
Metaforicamente parlando, ogni opzione di ripristino cambia un albero diverso, una parte diversa di come git salva le istantanee.
Alberi, di cosa stiamo parlando qui? Git utilizza la directory di lavoro, l'indice (noto anche come area di staging) e qualcosa chiamato HEAD per la creazione e il recupero di commit.
La directory di lavoro ti consente di modificare i file che puoi inserire nell'indice. Questa area di gestione temporanea ti consente di sintonizzare e selezionare ciò che desideri inserire nel prossimo commit. Un oggetto commit è una versione crittografata con hash dei tuoi contenuti. Ha alcuni metadati aggiunti e fa riferimento ai commit precedenti che ci permettono di fare i nostri bit di viaggio nel tempo.
HEAD è un riferimento che punta a tali oggetti commit. È semplicemente un puntatore che si aggiorna con ogni nuovo commit o cambio di ramo. Puoi spostarlo e puntare a qualsiasi punto nel tempo con l'oggetto commit.
Per maggiori informazioni sugli alberi e simili, dai un'occhiata al mio video sui tre alberi e Git. Copre il flusso di lavoro di base in Git ed è una solida base per comprendere meglio la logica dell'utilizzo di git reset.
Ora diamo un'occhiata alle diverse opzioni.
Questo vale per tutti i nove metri. Sposterà prima HEAD e aggiornerà l'indice con il contenuto del commit che HEAD sta ora indicando. Quindi aggiornerà la directory di lavoro con il contenuto dell'indice, quindi distruggendo il contenuto che è stato modificato nella directory di lavoro.
Pertanto, è l'unica versione di git reset che è un po 'pericolosa se non sai cosa stai facendo.
Ciò sposta HEAD e aggiorna anche l'indice con i contenuti del commit desiderato a CUI non punta. La directory di lavoro non è influenzata da tale operazione.
L'opzione mista è l'impostazione predefinita se non si fornisce il ripristino di git con un'opzione. Funziona sempre in modo sicuro, quindi non c'è bisogno di aver paura di perdere il lavoro.
Questa opzione sposta solo HEAD e si ferma proprio lì. In effetti, questo annullerà l'ultimo comando di commit git.
La directory di lavoro e i file che potrebbero essere messi in scena non sono ancora interessati da tale operazione.
Con tutte queste opzioni per git reset, devi dire esplicitamente a git dove interrompere la riproduzione, riavvolgere il contenuto e i file dai commit precedenti per specificare gli alberi che vuoi influenzare. Possiamo fare un ulteriore passo avanti e reimpostare il programma con un percorso file.
Se usi un percorso, Git non muoverà HEAD. Perché? Perché HEAD punta a un oggetto commit e non può puntare solo a un sottoinsieme di esso. In altre parole, HEAD non punta a file specifici ma a oggetti commit, che consistono in file di blocco e alcuni metadati. L'indice e la directory di lavoro, d'altra parte, possono essere indirizzati in sezioni di sorta.
Solo l'indice e la directory di lavoro svolgono un ruolo quando si utilizza un percorso. Semplicemente copia il contenuto di un file nell'indice e non può fare molto altro. git resetta some-file.ext
presume che per definizione intendevi git reset - mixed HEAD some-file.ext
e non influenzerà la directory di lavoro.
A proposito, poiché HEAD non può muoversi, l'opzione soft sarebbe inutile. Diciamo che hai lavorato sulla versione 3 di un file e l'hai aggiunto all'indice per il tuo prossimo commento. Ora vuoi togliere queste modifiche. Correre git resetta some-file.ext
per rimuovere questo particolare file.
Di conseguenza, l'indice verrà popolato dallo stato del file dalla versione 2, la versione dall'ultimo commit a cui punta HEAD. Le modifiche apportate al file, in pratica la versione 3, sono ancora disponibili nella directory di lavoro. Sei ancora in grado di ottenere queste modifiche alla versione 3 dello stage di questo file.
Quindi cosa fai in effetti con git resetta some-file.ext
si manipola solo l'indice.
Che dire git reset --hard some-file.ext
? Perché non possiamo usare anche quello?
Questa funzionalità è realizzata da git checkout
con un nome di file. git checkout some-file.ext
è in realtà cosa git reset --hard some-file.ext
farebbe, ma Git non ci lascia usare l'opzione difficile.
Facciamo un ulteriore passo avanti. Possiamo scegliere come target qualsiasi commit per ripristinare un file specifico, non solo quello più recente rappresentato da HEAD. Ciò reimposta i file mirati nell'indice allo stato di un determinato commit, di nuovo senza influire sulla directory di lavoro o su qualsiasi commit.
Dopo aver reimpostato l'indice sullo stato di un determinato commit, è possibile utilizzare un aggiornamento all'indietro di ordinamenti git checkout
con un nome di file per controllare il contenuto dell'indice nella tua directory di lavoro.
Perché usare la cassa? Perché git reset --hard
con un file non è qualcosa che Git ti permette di fare.
Ma fa attenzione. utilizzando git checkout
con un percorso di file si eliminerà le ultime modifiche nella directory di lavoro e la sostituirà con la versione del file in quel commit specifico.
Se hai trovato questo utile, perché non controllare alcuni altri corsi Git?
Puoi guardare la nostra introduzione a Git e GitHub o provare gli altri corsi di pausa caffè in questa serie: