2011-07-20 22 views
20

Tengo una rama principal como esto ..Eliminar un antiguo commit Git de una rama sin usar un parche reverso?

A -- B -- C -- D -- E -- HEAD 

¿Hay algún comando que quitar uno de una vieja cometen y retener a los demás, por ejemplo cometer C?

finalmente se vuelve como este

A -- B -- D -- E -- HEAD 

Sé que podemos usar un parche inversa y aplicar un nuevo commit con el parche inversa para eliminar cometer C, pero la estructura de árbol no será tan clara y se ve voluminosos , es decir,

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD 

¿Alguien sabe?

Respuesta

28

Use rebase interactivo. Por ejemplo, para volver 5 se compromete:

git rebase -i HEAD~5 

A continuación, en el editor el que aparece, elimine la línea que contiene la confirmación de que desea eliminar.

+7

Con la advertencia habitual de no hacer esto si ha presionado esto en otro lugar. – manojlds

+5

Con la excepción habitual de que está seguro de que es el único que usa el control remoto al que lo presionó. –

+4

Con la adición habitual de que también es posible si notificas a todos los demás desarrolladores y ellos pueden repararlo en su extremo –

4

interactivo rebase obras, sino hacerlo con un solo comando:

git rebase --onto B C 

todavía ven los comentarios sobre la respuesta "rebase interactivo". Se aplican aquí, también.

Cuestiones relacionadas