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:
Para complicar aún más las cosas, hay varias formas de deshacer un compromiso. Tu también puedes:
Git tiene una herramienta dedicada para cada una de estas situaciones. Empecemos por 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..
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).
git checkout
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.
reinicio de git
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.
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.
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..
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..
Esta es la forma ideal de deshacer los cambios que ya se han confirmado en un repositorio público.
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
.
Esta lección representa un capítulo de Git sucintamente, un libro electrónico gratuito del equipo en Syncfusion.