2011-07-06 25 views
8

Quería retroceder al último commit después de cometer un error masivo, pero logré deshacerme un poco demasiado. El compromiso que quería reafirmar no aparece cuando ingreso 'git log' en bash (supongo que porque ya no está en el historial). ¿Hay alguna manera de recuperar el último compromiso por fecha?Cómo deshacer un Git rollback

También estoy usando eGit en eclipse para el mismo proyecto si eso hace las cosas más fáciles. Gracias.

Respuesta

21

Si estás bien con la línea de comandos, vaya a usted Repo, hacer un git reflog y obtener la confirmación que desea "rollback" para y hacer un git reset --hard <commit>

También sería capaz de hacer git reset --hard [email protected]{1} y luego volver a egit y revertir a la confirmación deseada.

+2

Relevante: [git reflog, su red de seguridad] (http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html) –

+0

¡Maravilloso! Me salvaste mucho trabajo, gracias. – Chironex

2

Encuentro que generalmente es mejor hacer que sus cambios avancen en el tiempo en lugar de hacia atrás.

El enfoque de Git es "revertir" el compromiso. Cuando revierte una confirmación, revisa en su directorio de trabajo el inverso de la confirmación en cuestión. Luego agregas y comprometes eso, y acabas de hacer un NUEVO compromiso, que comete la "anulación" de la confirmación que estás revocando, Y deja un registro en la historia de que tal cosa sucedió, así que si quieres deshacer su ruina, es fácil de hacer.

+0

Cuando reconoce que ha hecho algo erróneo antes de que sea una parte indeleble de la historia (es decir, se ha compartido con otras personas), es preferible no grabarlo. Grabar malas confirmaciones significa que herramientas como 'git bisect' tienen más con las que tropezar. – Novelocrat

+0

Supongo que es verdad. Encuentro que los mensajes claros de compromiso me salvan de demasiada pena en ese sentido. Y si necesito revertir mi revertir (que de vez en cuando tengo), es bueno tenerlo allí para revertir. –