2011-02-02 18 views
19

¿Cómo "retrotraer" la última confirmación en git sin eliminar ningún cambio?git equivalente para hg rollback

Esto es algo que he hecho a menudo en hg:

  • Commit "fijo 107."
  • recordar que se me olvidó hacer algo
  • hg rollback
  • Hacer algo
  • Commit "fijo 107."

Respuesta

18

Con git, es posible que prefiera utilizar la opción --amend en ese caso.

  • Commit "Fixed 107."
  • recordar que se me olvidó hacer algo
  • Hacer algo
  • git commit --amend y editar las notas

Si tiene que deshacer por otras razones miren git revert

+6

'revert' es una forma de lidiar solamente con una de varias razones más. Si el compromiso en cuestión fue publicado, entonces, de hecho, use 'git revert'. Si no se ha insertado, y es la confirmación más reciente, use 'git reset [--hard] HEAD ^'. Si no se ha insertado, y no es la confirmación más reciente, use 'git rebase -i' para eliminarlo del historial, dejando el resto intacto. – Cascabel

+3

Cuidado con git noobs (como yo).Hice "git reset HEAD ^" y no solo eliminé mi confirmación del historial sino que también revertí los archivos comprometidos a su estado de confirmación anterior. –

+0

@DaviLima 'git reset HEAD ^' no debería hacer eso, solo debería modificar los archivos en su directorio de trabajo si también usa el indicador '--hard'. – dubiousjim

3

En esta instancia específica, me git commit --amend. Si aún no ha enviado y ya ha realizado otros cambios, también puede usar git rebase -i para editar la confirmación que desee.

1

yo estaba tratando de hacer una reversión hg en mi repositorio git y lo logré usando

git reset HEAD~ 

esto me dejó con mis cambios en el directorio de trabajo, pero ahora no está ocupado. Source

15

Prueba esto:

git reset --soft HEAD^ 

Me pareció que era el mismo de 'hg rollback', debido a que:

  • última confirmación cancelados
  • cambios conservados
  • archivos cometidos anteriormente se organizan

También puede crear un alias de rollback git como esto:

git config --global alias.rollback 'reset --soft HEAD^' 

Por lo tanto, ahora se puede simplemente escribir git rollback a tener exactamente el mismo comando que tiene en Mercurial.