2012-01-17 26 views
7

He cometido un error en uno de los commits. Ahora quiero eliminar completamente esta confirmación, por lo que parece que nunca ha existido. No quiero ver esto en el registro.Cómo eliminar un 'commit git' de LOG, como si nunca hubiera existido

He intentado todos los consejos de this question ("How to delete a 'git commit'"), pero puedo ver la confirmación en el registro. ¿Cómo puedo eliminarlo por completo?

- Editar -

Ok, no me importa el por completo la información. Kevin Ballard son correctos.

Por ahora, no aplico esta confirmación, solo está en mi máquina. El ouah trabajo respuesta, el comando

git log 

no va a mostrar, pero lo que el comando

git reset --hard HEAD^ 

hacer es "chekout última confirmación y cambiar el la rama a esta", por lo que continúo viendo que se compromete con un programa de gráfico como SmartGit.

--Editar 2--

No, esto es un error SmartGit !!!! El compromiso realmente desapareció. Tengo que cerrar las ventanas del registro y luego abrir de nuevo. El compromiso ya no está allí.

+0

Podría estar equivocado, pero creo que no se puede. – zneak

+0

@zneak: Puedes, pero Rodrigo necesita dar más información. ¿Este compromiso ha sido empujado a alguna parte? ¿Te importa borrar toda la información sobre este compromiso y sus archivos desde el disco, o está bien solo asegurarte de que no se muestre en 'git log' (y se pueda recoger de forma natural en algún momento posterior) ? –

+0

Pruebe las sugerencias en este http://stackoverflow.com/questions/927358/git-undo-last-commit – Shraddha

Respuesta

10

Si es la última confirmación

git reset --hard HEAD^ 

si no es la última confirmación

git rebase -i commit_hash^ 

un editor se abrirá, borrar toda la línea con el compromiso, guardar y salir.

Tenga en cuenta que la reescritura de la historia o rebase si la rama ya ha sido empujado por lo general es una mala idea y es posible que prefiera utilizar

git revert commit_hash 

que agregará un nuevo commit que revierte el commit commit_hash.

+2

Si está tratando de eliminar una única confirmación, también puede usar 'git rebase --onto $ SHA1^$ SHA1' (donde '$ SHA1' es el compromiso para eliminar). Además, esto viene con la advertencia de que no reproducirá las fusiones. Puede darle el indicador '-p' para tratar de reproducir las fusiones, pero puede no funcionar correctamente si la confirmación que eliminó tiene un impacto en las resoluciones de fusión.También tenga en cuenta que mezclar '-p' con' -i' es una mala idea (vea la sección BUGS en la página de manual de git-rebase). –

+0

@ouah, probablemente debería mencionar que si la rama ha sido presionada, entonces esta es una MALA IDEA. – Richard

+0

@Richard bien, hecho! – ouah

1

Este comando (tenga cuidado, sería reescribir la historia):

git rebase --onto commitHash^ commitHash 

(@ solución de ouah no funcionó para mí, y en lugar de Kevin hizo, pero su solución no debería ser un comentario, lo que debería ser una respuesta como esta.)