2012-06-20 10 views
8

He hecho algunas confirmaciones y las he insertado en mi repositorio. Luego hice una solicitud de extracción, pero me di cuenta de que hay algunas confirmaciones que no deseo incluir en la solicitud de extracción.Eliminar 4 confirmaciones de mi historial de git

se ven así:

My commits look like this: 

Correct HTML  
ab1c41c 

HTML escaping 
8b38955 

Merge branch 'master' into internationalized  
2854662 

Modified config 
b942f13 

tried pushing 
b73d792 

Added assets  
f20106e 

Added config  
408118f 

Fixed views conflicts 
86f2509 

added layouts 
da27e11 

Fixed layout markup 
92d6bcc 

si quiero para deshacerse de estas confirmaciones:

Modified config 
b942f13 

tried pushing 
b73d792 

Added assets  
f20106e 

Added config  
408118f 

¿Cómo lo hago? Observe que quiero seguir estos los que están delante en el tiempo que los quiero borrar:

Correct HTML  
ab1c41c 

HTML escaping 
8b38955 
+0

Quiere deshacerse de todos los archivos y modificaciones de estos tres commits. ¿O simplemente no quieres que se muestren los mensajes de compromiso? –

+0

¿No quieres esas confirmaciones en el repositorio central? o solo en tu directorio de trabajo? –

Respuesta

12

Puede hacer un interactive rebase.

Asumiendo que su cabeza está en ab1c41c de su ejemplo, invocar el rebase de la siguiente manera

git rebase -i HEAD~7 

Esto le dice a Git que desea manipular el último 8 o por lo comete. Se le soltará en su editor con una lista de las confirmaciones y algunas instrucciones.

Elimine las líneas que contienen las confirmaciones para eliminar, guardar y salir. Git preformará la rebase, y eso es todo.

Tenga en cuenta que, debido a la rebase, si desea pasar a la misma rama deberá pasar la opción --force.

Descargo de responsabilidad Rebasar y forzar empujar puede hacer que pierda el trabajo o moleste a la gente, así que asegúrese de entender lo que está haciendo. :)

+1

** Advertencia: ** No refuerce las confirmaciones que ha enviado a un repositorio público. [Consulte aquí] (http://git-scm.com/book/en/Git-Branching-Rebasing#The-Perils-of-Rebasing). En este escenario, esas confirmaciones ya están disponibles en el repositorio público. –

1

Acaba de reajustar con --hard en el commit justo antes:

git reset --hard 86f2509 

Cuidado: usted Perderé esos compromisos para siempre, no hay forma de regresar. Además, si alguien ha retirado las confirmaciones de las que desea deshacerse, las cosas pueden complicarse. En ese caso, probablemente quieras mirar 'git revert'.

+0

¿Qué pasa si hay algunas confirmaciones de antes que quiero mantener? Hice un fork, y hay algunas confirmaciones que quiero mantener. –

+0

Supongo que necesitarás crear una bifurcación, reiniciar y luego seleccionar cuidadosamente las confirmaciones que deseas. –

3

Como Blake Taylor mencionó here, puede usar interactive rebase para reordenar compromisos (o) eliminar compromisos intermedios.

Pero eso debe hacerse, antes de enviar esos commits al repositorio público. Refer here. En su caso, esos commits ya están disponibles en el repositorio público. Por lo tanto, no sugiero usar rebase.

Si no quiere esas confirmaciones en su directorio de trabajo.

  • a) Crear una rama, lo que apunta a 86f2509 (la última estable cometen en su árbol de trabajo).

    git checkout -b <branch name> 86f2509

  • b) Cherry Pick esas confirmaciones que desee. En su caso ab1c41c y 8b38955.

    git cherry-pick 8b38955 ab1c41c

Ahora su directorio de trabajo no tendrán esas confirmaciones no deseados.

Cuestiones relacionadas