2012-01-03 23 views
5

Desde aquí http://blog.prabir.me/post/Undo-in-Git.aspx, dijo¿Cómo puedo deshacer un commit de git DESPUÉS de un git push?

This undo’s your commit and also resets your working tree to the last commit. 

1 git reset --hard HEAD^ 

Pero ¿cómo se puede hacer ONU-I mi última confirmación después de que hice un 'git push'?

Gracias.

Cuando hago 'git log', recibo como mi superior comprometerse

commit 29fc764693a5933a379169e22891e4b0d3d2426f 
Merge: 002db49 cfb1d8f 

¿Cómo puedo volver 'git' ese cambio?

recibí este

$ git revert HEAD 
fatal: Commit 29fc764693a5933a379169e22891e4b0d3d2426f is a merge but no -m option was given. 

Respuesta

7

puede usar git revert HEAD, que genera una nueva confirmación, que deshará los cambios en su confirmación anterior. Mire here. Sin embargo, tenga en cuenta que tanto el compromiso como la confirmación de reversión aparecerán en el historial.

Editar: Como se menciona en KingChrunch, al revertir una fusión, debe especificar a qué padre desea volver, así que agregue -m <parent>. Por supuesto, simplemente siguiendo el enlace que he publicado se lo habría dicho.

No puede (en realidad no debería) modificar el historial de un repositorio compartido. Si está inclinado a modificar el historial (no lo haga), puede usar git reset con git push --force, o git rebase.

+0

¿Qué significa 'fatal: Commit 29fc764693a5933a379169e22891e4b0d3d2426f es una fusión, pero no se dio la opción -m'. Recibo este error cuando hago 'git revert HEAD'? – michael

+1

'git revert' regresa a una confirmación anterior. Si desea revertir una fusión, no es tan fácil, ya que tiene al menos 2 confirmaciones principales y nadie puede decir cuál es la rama y cuál es/son los padres fusionados. Debe elegir cuál desea comprometer utilizando '-m ' -option. Eche un vistazo a 'git help revert'. – KingCrunch

2

Usted debe git revert la confirmación.

También puede git push --force la rama después del git reset, pero si alguien sacó su rama antes de eso, sus historias se habrán separado, por lo que realmente no debería hacer esto.

+0

Ok. Pero hice un 'commit git' y luego 'git push', ya que quiero deshacer mi cambio, lo hice 'git reset --soft HEAD ^' y quiero probar mi código sin ese cambio, hice 'git stash' 'construir y probar'. ¿Ahora necesito hacer git stash pop, antes de hacer un 'git revert'? – michael

0

Acabo de encontrar un método aún más fácil si está usando GitLab y un paso de solicitud de revisión/fusión de código. Encontré esto después de que accidentalmente incluí un archivo innecesario en un commit & push. También puede utilizar este método para realizar modificaciones y volver a encriptarlas en su sucursal antes de la fusión.

Nuestro proceso: Después de la codificación, confirmamos, recuperamos desde el origen, rebase, presionamos a GitLab. Esto crea una rama en GitLab, luego creamos una solicitud de fusión para esa rama. Esto es para asegurar que todos los códigos sean revisados ​​por un par antes de entrar en la rama principal. En este caso, fue un paso extremadamente útil ya que mi colega de revisión por pares descubrió mi gaff.

Nota: Esta es solo una opción ANTES de que se acepte una solicitud de fusión.

Para eliminar un archivo de una confirmación después de empujar a GitLab y antes de la fusión:

  1. Abra la GitLab fusionar solicitud
  2. Seleccione la pestaña de novedades del
  3. Encuentra el archivo que no es deseado en el cometen
  4. Haga clic en el botón 'Ver archivo' para el archivo
  5. Haga clic en el botón 'Borrar'
  6. Introduzca la información de una confirmación nd commit the change

Tu solicitud de fusión ha sido solucionada y el archivo no deseado eliminado de tu confirmación. Ahora puede fusionarse (si el resto pasa la revisión del código).

También puede editar y volver a enviar los archivos de esta manera. Es una manera fácil de realizar correcciones rápidas sin necesidad de abrir Eclipse/IntelliJ (cualquiera que sea la herramienta que use) y verificar la rama.

Esto me ahorró horas de dolor al evitar eliminar un archivo de una rama de Eclipse.