2010-05-24 15 views
13

Me fusioné de forma incorrecta entre dos ramas. Luego ejecuté lo siguiente:Git deshacer última confirmación

git reset --hard HEAD^ 

Ahora estoy de vuelta en la confirmación anterior (que es donde quiero estar). ¿Era eso lo correcto?

El compromiso incorrecto todavía está en el repositorio, ¿está bien o debería hacer algo más para eliminarlo del repositorio?

No he presionado ni comprometido nada más todavía.

+0

Para la posteridad, es posible que desee corregir su comando. Fue 'git reset ...', no 'git commit ...'. –

+0

Vaya, gracias por señalar eso. – Justin

Respuesta

15

Eso es lo que hay que hacer.

Puede hacer un git gc para recoger las confirmaciones desconectadas, pero no es necesario.

+6

Bueno, pasarán 90 días antes de que 'git gc' elimine esa confirmación. Se puede llegar a los compromisos desde el recuento de reflog como alcanzable, y el reflog tarda 90 días en caducar (de forma predeterminada). Pero la esencia de la respuesta es correcta: git te está cuidando, tratando de no eliminar nada permanentemente, por las dudas. – Cascabel

+0

Gracias James y Jefromi. – Justin

+0

@Jefromi: Nailed it. Intento no sugerir 'gc' a las personas, porque se trata de la única operación no reversible en git. –

0

mmmm ... git revert puede ser es lo que necesita

también this artículo podría ayudarle.

+0

Gracias, sin embargo, no quería generar una confirmación inversa. – Justin

1

El uso de ^ con HEAD^ no funcionó para mí. En cambio, tuve que usar la referencia de: http://gitref.org/basic/#commit

git restablecer CABEZA --soft ~

(git version 1.7.12.4 (Apple Git-37))

(Nota: si está utilizando zsh (como yo) que también puede escapar el carácter ^ en lugar del comando alternativo que di más arriba)

+2

¿Estás usando zsh? Si es usted, necesita escapar del^ – Justin

+0

Gracias: D lo estoy. qué advertencia más extraña – electblake

Cuestiones relacionadas