2011-02-09 12 views
106

En mi repositorio git, hice 5 confirmaciones, como a continuación en mi git log:¿Cómo puedo cambiar mi repositorio git a una confirmación en concreto

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 

¿Cómo puedo hacer retroceder mi anterior 4 comete localmente en una ¿rama? En otras palabras, ¿cómo puedo crear una rama sin mis últimas 4 confirmaciones (suponiendo que tengo el SHA de esa confirmación del registro de git)?

Respuesta

127

Para crear una nueva rama (localmente):

  • Con el hash comprometerse (o parte de ella)

    git checkout -b new_branch 6e559cb 
    
  • o para volver 4 confirmaciones de CABEZA

    git checkout -b new_branch HEAD~4 
    

Una vez creada la nueva rama (a nivel local), es posible que desee replicar este cambio en un mando a distancia del mismo nombre: How can I push my changes to a remote branch


Para desechando los últimos tres confirmaciones, consulte Lunaryorn's answer below.


Para mover la cabeza rama actual a la especificada comprometerse sin crear una nueva rama, ver Arpiagar's answer below.

39

Si usted quiere lanzar las últimas cuatro compromete distancia, el uso:

git reset --hard HEAD^^^^ 

Alternativamente, puede especificar el hash de una confirmación de que desea restablecer a:

git reset --hard 6e559cb 
+3

Esto deja a cabo la etapa de ramificación. Si ejecuta exactamente lo que se muestra aquí, perderá permanentemente esos commits principales. –

+3

Bueno, no necesariamente de forma permanente: uno podría obtener el SHA del encabezado anterior a través de 'git reflog' y reiniciarlo, pero se los estaría descartando, sí. – Amber

10

Sólo partida de los cometen que quiere su nuevo comienzo rama desde y crear una nueva rama

git checkout -b newbranch 6e559cb95 
56

Todos los comandos anteriores crean una nueva rama y con la última cometer siendo la especificada en el comando, pero sólo en caso de que desee a la cabeza rama actual para pasar a la confirmación especificada, a continuación es el comando

git checkout <commit_hash> 

se separa y señalan que la cabeza especifica cometer y salva de la creación de una nueva rama cuando el usuario solo quiere ver el estado de la sucursal hasta ese compromiso particular.


A continuación, puede ser que desee volver a la última cometer & fijar la cabeza separada:

Fix a Git detached head?

+0

Esto separaría la cabeza. No conveniente. –

Cuestiones relacionadas