Git sucintamente deshaciendo cambios

El punto central de mantener copias "seguras" de un proyecto de software es su tranquilidad: si su proyecto se rompe de repente, sabrá que tiene un acceso fácil a una versión funcional y podrá identificar con precisión dónde está el problema Fue presentado. Para este fin, la grabación de confirmaciones es inútil sin la capacidad de deshacer cambios. Sin embargo, dado que Git tiene tantos componentes, el "deshacer" puede tomar muchos significados diferentes. Por ejemplo, usted puede:

  • Deshacer cambios en el directorio de trabajo
  • Deshacer cambios en el área de preparación
  • Deshacer todo un commit

Para complicar aún más las cosas, hay varias formas de deshacer un compromiso. Tu también puedes:

  1. Simplemente elimine la confirmación del historial del proyecto..
  2. Deje la confirmación como está, utilizando una nueva confirmación para deshacer los cambios introducidos por la primera confirmación.

Git tiene una herramienta dedicada para cada una de estas situaciones. Empecemos por el directorio de trabajo..


Deshacer en el directorio de trabajo

El período de tiempo inmediatamente después de guardar una copia segura de un proyecto es de gran innovación. Empoderado por el conocimiento de que eres libre de hacer cualquier cosa Usted quiere sin dañar el código base, puede experimentar hasta el contenido de su corazón. Sin embargo, esta experimentación despreocupada a menudo toma un giro equivocado y conduce a un directorio de trabajo con un montón de código fuera de tema. Cuando llegue a este punto, probablemente querrá ejecutar los siguientes comandos:

 git reset - hard HEAD git clean -f

Esta configuración de reinicio de git hace que el directorio de trabajo y la etapa coincidan con los archivos en la confirmación más reciente (también llamada CABEZA), borrando efectivamente todos los cambios no comprometidos en rastreado archivos. Para disponer de sin seguimiento archivos, tienes que usar el git limpio mando. Git es muy cuidadoso al eliminar el código, por lo que también debe proporcionar el -F Opción para forzar la eliminación de estos archivos..


Restablecer todos los cambios no comprometidos

Archivos individuales

También es posible apuntar a archivos individuales. El siguiente comando hará que un solo archivo en el directorio de trabajo coincida con la versión en la confirmación más reciente.

 git checkout HEAD 

Este comando no cambia en absoluto el historial del proyecto, por lo que puede reemplazar de forma segura CABEZA con un ID de compromiso, rama o etiqueta para hacer que el archivo coincida con la versión en ese compromiso. Pero hacer no prueba esto con reinicio de git, como lo será cambia tu historia (explicada en Deshacer confirmaciones).


Revertir un archivo con git checkout

Deshacer en el área de ensayo

En el proceso de configuración de su próxima confirmación, ocasionalmente agregará un archivo adicional al escenario. La siguiente invocación de reinicio de git lo desorganizará:

 git reset HEAD 

Omitiendo el --difícil La bandera le dice a Git que deje el directorio de trabajo solo (a diferencia de git reset - hard HEAD, que restablece cada archivo tanto en el directorio de trabajo como en el escenario). La versión por etapas del archivo coincide CABEZA, y el directorio de trabajo conserva la versión modificada. Como es de esperar, esto se traduce en una modificación sin etapas en su estado de git salida.


Desactivar un archivo con reinicio de git

Deshacer confirmaciones

Hay dos formas de deshacer un commit usando Git: Puedes: Reiniciar simplemente eliminándolo del historial del proyecto, o puede revertir generando un nuevo Compromiso que se deshace de los cambios introducidos en el original. Deshacer introduciendo otro compromiso puede parecer excesivo, pero reescribir el historial eliminando completamente los compromisos puede tener graves consecuencias en los flujos de trabajo de múltiples usuarios.

Restableciendo

El siempre versátil reinicio de git también puede ser usado para movimiento la CABEZA referencia.

 git reset HEAD ~ 1

los CABEZA ~ 1 parámetro de sintaxis especifica la confirmación que se produce inmediatamente antes CABEZA (igualmente, CABEZA ~ 2 se refiere a la segunda confirmación antes CABEZA). Moviendo el CABEZA referencia hacia atrás, está eliminando efectivamente la confirmación más reciente de la historia del proyecto.


Emocionante CABEZA a CABEZA ~ 1 con reinicio de git

Esta es una forma fácil de eliminar un par de confirmaciones que se desviaron del tema, pero presenta un serio problema de colaboración. Si otros desarrolladores hubieran comenzado a construir sobre el compromiso que eliminamos, ¿cómo se sincronizarían con nuestro repositorio? Deberían solicitarnos el ID del compromiso de reemplazo, rastrearlo manualmente en su repositorio, mover todos sus cambios a ese compromiso, resolver conflictos de combinación y luego compartir sus "nuevos" cambios con todos otra vez. Solo imagine lo que sucedería en un proyecto de código abierto con cientos de colaboradores ...

La cuestión es, no restablecer los compromisos públicos, Pero siéntase libre de eliminar los que no haya compartido con nadie. Revisaremos este concepto más adelante en esta sesión..

Volviendo

Para remediar los problemas introducidos al restablecer los compromisos públicos, los desarrolladores de Git idearon otra forma de deshacer los compromisos: revertir. En lugar de alterar las confirmaciones existentes, revertir agrega un nuevo commit que deshace el commit del problema:

 git revertir 

Esto toma los cambios en la confirmación especificada, descubre cómo deshacerlos y crea una nueva confirmación con el conjunto de cambios resultante. Para Git y para otros usuarios, la confirmación de revertir se ve y actúa como cualquier otra confirmación. Simplemente se deshace de los cambios introducidos por una confirmación anterior..


Deshacer un commit con un commit de revertir

Esta es la forma ideal de deshacer los cambios que ya se han confirmado en un repositorio público.

Enmienda

Además de deshacer completamente las confirmaciones, también puede enmendar la confirmación más reciente mediante la preparación de los cambios como de costumbre, luego se ejecuta:

 git commit - enmendar

Esta reemplaza la confirmación anterior en lugar de crear una nueva, lo cual es muy útil si olvidó agregar uno o dos archivos. Para su comodidad, el editor de confirmación se muestra con el mensaje de confirmación anterior. De nuevo, debes ten cuidado cuando se usa el --enmendar bandera, ya que reescribe la historia como reinicio de git.


Modificando el compromiso más reciente.

Esta lección representa un capítulo de Git sucintamente, un libro electrónico gratuito del equipo en Syncfusion.