2012-03-17 6 views

Respuesta

3
git reset --hard HEAD^ 

Este comando restablece su rama en la confirmación anterior, es decir el commit antes de la fusión cometió, que es la que desea deshacer. Tu trabajo quedará intacto.

Recuerde que todo lo que se ha comprometido sigue allí como objetos sueltos y siempre puede usar git reflog para volver a cualquier versión a la que HEAD haya apuntado anteriormente. Esta es la razón por la que es tan importante comprometerse a menudo con git, que puede deshacer todos los cambios que haya realizado con facilidad.

+1

Todas estas respuestas usando 'git reset --hard _some local commit_' hacen que tu repositorio se vea bien, pero deja todo se compromete desde el repositorio remoto incorrecto en su repositorio local, por lo que ninguno es un "deshacer" completo. git gc no eliminará las confirmaciones incorrectas porque están en su reflog (ya que las mencionó recientemente). Creo que eventualmente caducarán, pero si quieres matarlos de inmediato requiere una cirugía más profunda. – skierpage

+0

@skierpage Correcto. Los commits siguen ahí, colgando, hasta que los limpies. Hay varias formas de hacer esto. La forma más fácil es volver a clonar el repositorio (suponiendo que puedes descartar el que estás usando en este momento) – ralphtheninja

3

Una forma de hacer esto

$ git reset --hard latest-good-commit-hash 

Uso git log --all (o más gráficamente, utilice gitk --all) para ver la historia cometer

3

Trate git reflog. Reflog le permite deshacer casi cualquier operación. Algo como esto

git reset --hard [email protected]{1} 

Sin embargo, si usted tenía copia de trabajo sucio, que borrará todos los cambios, así que cuidado.

+0

Gracias! Yo había agregado y comprometido pero no empujado. lo que se agregó y se comprometió no sería sobrepasado por esto ahora, ¿verdad? – Barka

+0

Correcto, si agregó y se comprometió, lo que agregó y cometió seguirá allí después de esto. –

+0

@ user277498, vea también la salida de 'git reflog' antes de hacer el' reset'. Contiene información que diablos significa realmente el sufijo '@ {1}', no necesita haber magia :) –

Cuestiones relacionadas