Come posso passare il mio repository git a un determinato commit


191

Nel mio repository git, ho effettuato 5 commit, come di seguito nel mio log git:

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

Come posso ripristinare i miei precedenti 4 commit localmente in una filiale? In altre parole, come posso creare una succursale senza i miei ultimi 4 commit (supponiamo che io abbia lo SHA di quel commit dal registro git)?

Risposte:


233

Per creare un nuovo ramo (localmente):

  • Con l'hash di commit (o parte di esso)

    git checkout -b new_branch 6e559cb
    
  • o per tornare indietro di 4 commit da HEAD

    git checkout -b new_branch HEAD~4
    

Una volta creato il tuo nuovo ramo (localmente), potresti voler replicare questa modifica su un telecomando con lo stesso nome: Come posso inviare le mie modifiche a un ramo remoto


Per scartare gli ultimi tre commit , vedere la risposta di Lunaryorn di seguito .


Per spostare l'attuale ramo HEAD sul commit specificato senza creare un nuovo ramo , vedere la risposta di Arpiagar di seguito .


160

Tutti i comandi sopra creano un nuovo ramo e con l'ultimo commit è quello specificato nel comando, ma nel caso in cui desideri che il tuo ramo corrente HEADpassi al commit specificato, sotto c'è il comando:

 git checkout <commit_hash>

Si stacca e punta HEADal commit specificato e salva dalla creazione di un nuovo ramo quando l'utente desidera solo visualizzare lo stato del ramo fino a quel particolare commit.


È quindi possibile tornare all'ultimo commit e correggere HEAD distaccato:

Riparare una testa staccata Git?


1
Ciò distaccherebbe la testa. Non conveniente.
IgorGanapolsky,

anche se il <commit_hash>è nel ramo diverso che è avanti?
Ciasto piekarz,

La domanda collegata dice solo git checkout master, insieme a uno o due casi limite che possono applicarsi a determinate situazioni.
i336_

66

Se vuoi buttare via gli ultimi quattro commit, usa:

git reset --hard HEAD^^^^

In alternativa, è possibile specificare l'hash di un commit che si desidera ripristinare su:

git reset --hard 6e559cb

4
Questo lascia fuori il passaggio delle ramificazioni. Se esegue esattamente ciò che viene mostrato qui, perderà definitivamente i primi commit.
Jimmy Cuadra,

3
Bene, non necessariamente in modo permanente - si potrebbe ottenere lo SHA della testa precedente git refloge ripristinarlo - ma sarebbe buttarli via, sì.
Ambra

1
Se i commit vengono prima spinti e poi resettati, possono essere recuperati di nuovo semplicemente tirando.
Rick Smith,

17

Dai un'occhiata al commit da cui vuoi che inizi la tua nuova filiale e creane una nuova

git checkout -b newbranch 6e559cb95

0

Come posso ripristinare i miei precedenti 4 commit localmente in una filiale?

Ciò significa che non stai creando un nuovo ramo e non stai andando in stato distaccato. Un nuovo modo di farlo è:

git switch --detach revison

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.