Git deshacer el cambio al repository

A veces me equivoco y hago algo que no quería con Git:

  • cometiendo un código malo
  • creando una twig con un mal nombre
  • cometer después de solucionar conflictos de combinación durante la git rebase lugar de simplemente agregar files y ejecutar git rebase --continue ( como aquí )
  • otros posibles usos indebidos

¿Es posible colocar el repository de git (directory .git) bajo el control de la versión, y luego escribir un script para hacer posible un command como "git undo"? ¿Alguien lo ha hecho antes? ¿O es esta mala idea y hay algo más simple?

Este es un gran recurso para aprender git. Aquí hay algunos commands útiles para deshacer:

Uno de los problemas comunes se produce cuando se compromete demasiado pronto y posiblemente se le olvida agregar algunos files, o se arruina su post de confirmación. Si quieres intentarlo de nuevo, puedes ejecutar commit con la opción –menda:

 git commit --amend 

Este command toma su área de preparación y la usa para la confirmación. Si no ha realizado ningún cambio desde su última confirmación (por ejemplo, ejecuta este command inmediatamente después de su confirmación anterior), su instantánea se verá exactamente igual, y todo lo que cambiará será su post de confirmación.

Fuente: https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things

A veces me equivoco y hago algo que no quería con Git:

  • cometiendo un código malo

Puede deshacer fácilmente la última confirmación utilizando git-reset, pero no se recomienda hacerlo con el código publicado.

 git reset --soft HEAD^ 

(Nota: Puede usar git commit --amend como se menciona en otra respuesta para reiniciar y confirmar a la vez).

Puede crear un nuevo compromiso que deshaga el anterior y funcione bien con el código ya publicado.

 git revert 
  • creando una twig con un mal nombre

Puede deshacer la creación de una sucursal local simplemente eliminándola.

 git branch -D <name> 

También puede deshacer una twig remota borrándola.

 git push <remote> :<name> 

¿Es posible colocar el repository de git (directory .git) bajo el control de la versión, y luego escribir un script para hacer posible un command como "git undo"? ¿Alguien lo ha hecho antes? ¿O es esta mala idea y hay algo más simple?

No es necesario tener su .git en control de versiones, tiene sus propios mecanismos de control de versiones intrínsecas como se describió anteriormente. Cuando las cosas empeoran, siempre puedes rastrear los cambios de reference usando una herramienta de bajo nivel llamada git-reflog .

Puede pensar en la posibilidad de un command global git-undo . Pero en Git está bastante claro qué acciones son locales y cuáles son remotas. Una vez que publique sus cambios, lo más probable es que no quiera romper la continuidad de los commits. Por lo tanto, un command de deshacer teórico y seguro para la historia teórico debería tener esto en count y, de hecho, debería seguir un flujo de trabajo específico. Definitivamente hay mucho espacio para herramientas específicas de flujo de trabajo sobre Git, pero la herramienta en sí misma es prácticamente neutral para el flujo de trabajo.

La pregunta es muy interesante, pero creo que no hay solución para su problema.

1) No es posible rastrear el directory .git sí mismo (al less con git). Y rastrear git con algún otro control de versión no es práctico en absoluto. E incluso si pudiera, ¿cuándo debería dejar de rastrear su seguimiento de control de versiones?

¿Deberías rastrear el seguimiento de la pista original? Esto crea una pista infinita de pistas.

2) git es increíblemente bueno manejando "errores" si los has hecho localmente. Lleva un time recordar todos los commands para deshacer y modificar las cosas después, pero si las dominas llegarás a ser mucho más rápido. Al less más rápido que con un control de versión que rastrea tu control de versión.