Git come ripristinare l'ultimo commit?

Git come ripristinare l'ultimo commit?
Git è uno strumento efficace che tiene traccia del tuo codice. E una delle grandi caratteristiche dello strumento è che puoi facilmente controllare la tua storia e tornare indietro se hai fatto un errore. Creiamo una situazione in cui è possibile ripristinare l'ultimo commit e vedere come funziona il comando di ripristino GIT.

Inizieremo con l'aggiunta di alcuni file. Nell'ultimo commit, andremo a aggiungere ed eliminare i file per creare una situazione disordinata. Quindi torneremo allo stato prima del caos.

È possibile creare una cartella chiamata /Test ed eseguire i seguenti comandi per inizializzare Git e creare la situazione sopra descritta (stiamo facendo intenzionalmente commit separati per creare una cronologia):

$ git init
Repository git vuoto inizializzato in/utenti/zakh_eecs/_work/apprendimento/git_revert/test/.idiota/
$ echo x> file_1.TXT
$ git aggiungi -a
$ git commit -m "aggiungendo file_1.TXT"
[Master (root-commit) 08Caf5d] Aggiunta di file_1.TXT
1 file modificato, 1 inserzione (+)
Crea modalità 100644 file_1.TXT
$ echo y> file_2.TXT
$ git aggiungi -a
$ git commit -m "aggiungendo file_2.TXT"
[Master BA18A2F] Aggiunta di file_2.TXT
1 file modificato, 1 inserzione (+)
Crea modalità 100644 file_2.TXT
$ echo z> file_3.TXT
$ git aggiungi -a
$ git commit -m "aggiungendo file_3.TXT"
[Master 97F09AD] Aggiunta di file_3.TXT
1 file modificato, 1 inserzione (+)
Crea modalità 100644 File_3.TXT
$ echo u> file_4.TXT
$ git aggiungi -a
$ git commit -m "aggiungendo file_4.TXT"
[Master 9CAF084] Aggiunta di file_4.TXT
1 file modificato, 1 inserzione (+)
Crea modalità 100644 file_4.TXT
$ echo v> file_5.TXT
$ git aggiungi -a
$ git commit -m "aggiungendo file_5.TXT"
[Master 3F228B2] Aggiunta di file_5.TXT
1 file modificato, 1 inserzione (+)
Crea modalità 100644 file_5.TXT

Se controlliamo la nostra cartella, dovremmo vedere la seguente situazione:

$ ls -1
file_1.TXT
file_2.TXT
file_3.TXT
file_4.TXT
file_5.TXT

Se controlliamo la cronologia, dovremmo avere i seguenti file:

$ git log --oneline
3F228B2 Aggiunta di file_5.TXT
9CAF084 Aggiunta di file_4.TXT
97F09AD Aggiunta di file_3.TXT
BA18A2F Aggiunta di file_2.TXT
08CAF5D Aggiunta di file_1.TXT

Ora creiamo un po 'di caos, elimineremo alcuni file e aggiungiamo un file cattivo.

$ rm file_2.TXT
$ rm file_4.TXT
$ echo w> my_bad_file.TXT
$ git aggiungi -a
$ git commit -m "file aggiunti ed eliminati senza pensare alle conseguenze"
[Master 879fbf8] Aggiunti ed eliminati file senza pensare alle conseguenze
3 file modificati, 1 inserimento (+), 2 eliminazioni (-)
Elimina modalità 100644 file_2.TXT
Elimina modalità 100644 file_4.TXT
Crea modalità 100644 my_bad_file.TXT

Ora, questa è la condizione della nostra cartella:

$ ls -1
file_1.TXT
file_3.TXT
file_5.TXT
my_bad_file.TXT

E questa è la condizione della nostra storia:

$ git log --oneline
879fbf8 Aggiunti ed eliminati file senza pensare alle conseguenze
3F228B2 Aggiunta di file_5.TXT
9CAF084 Aggiunta di file_4.TXT
97F09AD Aggiunta di file_3.TXT
BA18A2F Aggiunta di file_2.TXT
08CAF5D Aggiunta di file_1.TXT

Ci rendiamo conto che non vogliamo l'ultimo commit 879fbf8. Quindi utilizziamo il seguente comando di ripristino:

$ git revert 879fbf8

Aprirà una finestra di testo per la modifica del commento automatico:

Ripristina "File aggiunti ed eliminati senza pensare alle conseguenze"
Questo revoca commessa 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Inserisci il messaggio di commit per le tue modifiche. Linee che iniziano
# con "#" verrà ignorato e un messaggio vuoto aborta il commit.
# Su Branch Master
# Modifiche da commettere:
# nuovo file: file_2.TXT
# nuovo file: file_4.TXT
# cancellato: my_bad_file.TXT
#

Puoi modificare il commento. Lo manterremo così com'è. Non appena salvi la finestra dei commenti, l'attività di ripristino avrà luogo:

$ git revert 879fbf8
[Master 6E80F0E] Ripristina "File aggiunti ed eliminati senza pensare alle conseguenze"
3 file modificati, 2 inserzioni (+), 1 eliminazione (-)
Crea modalità 100644 file_2.TXT
Crea modalità 100644 file_4.TXT
Elimina modalità 100644 my_bad_file.TXT

Diamo un'occhiata alla nostra cartella ora:

$ ls -1
file_1.TXT
file_2.TXT
file_3.TXT
file_4.TXT
file_5.TXT

I nostri file sono tornati in sequenza come prima. Tutte le aggiunte e le eliminazioni sono state ripristinate. Controlliamo il registro:

$ git log --oneline
6e80f0e Ripristina "File aggiunti ed eliminati senza pensare alle conseguenze"
879fbf8 Aggiunti ed eliminati file senza pensare alle conseguenze
3F228B2 Aggiunta di file_5.TXT
9CAF084 Aggiunta di file_4.TXT
97F09AD Aggiunta di file_3.TXT
BA18A2F Aggiunta di file_2.TXT
08CAF5D Aggiunta di file_1.TXT

C'è un nuovo commit 6e80f0e. Eventuali modifiche che facevano parte 879fbf8 è stato annullato e poi impegnato in 6e80f0e.

Avvertimento: Il comando di reset Git consente di annullare anche il commit. Ma nel caso di ripristino (in particolare hard reset), avrebbe eliminato il 879fbf8 impegnarsi come non è mai successo e non ci sarebbe stato no 6e80f0e commettere. Con un comando di ripristino, tutti possono vedere le modifiche che hanno avuto luogo. Nel caso di ripristino, non viene lasciata traccia. Quindi è una cattiva idea utilizzare il comando reset in un repository pubblico perché può causare confusione di massa. La regola d'oro è: non utilizzare il ripristino nei repository pubblici, usa il ripristino che è più sicuro.

Insomma:

Il comando Git Revert è un modo veloce e conveniente per porre rimedio ai tuoi errori. È un comando che dovresti ricordare se lavori regolarmente con Git.

Ulteriori studi:

  • https: // git-scm.com/docs/git-revert
  • https: // git-scm.com/docs/git-reset
  • GIT: impara il controllo della versione con GIT: una guida per principianti più dettagliata
  • Controllo della versione con GIT: potenti strumenti e tecniche per lo sviluppo di software collaborativo
  • Pro Git, 2a edizione