¿Cómo funciona Git Reset?

¿Quieres saber cómo funciona el Git? Reiniciar la opción funciona?

En una serie de cursos de Git en Envato Tuts +, repasé algunos de los conceptos fundamentales de Git en videos simples.

En este video de la serie, aprenderás todo sobre el reinicio de Git. Verá cómo usar cada tipo de reinicio y cómo estas variedades interactúan con los tres árboles Git:

  • suave: solo cambia HEAD, pero no cambia los archivos almacenados en el índice o archivos de trabajo.
  • mezclado: mueve HEAD y actualiza el índice con el contenido de la revisión a la que apunta HEAD ahora.
  • difícil: mueve HEAD y actualiza el índice y el directorio de trabajo; esta es la única versión de restablecimiento que puede causar la pérdida de datos.

También te mostraré cómo usar reinicio de git en archivos individuales.

Conceptos básicos de Git: Restablecer

 

Cómo funciona Git Reset

Restablecer Git. ¿Qué hace? Es cómo deshacer algunos cambios que son locales a su computadora. Cuando haya realizado algún trabajo que necesite rebobinar, reiniciar es su amigo. Puedes empezar de nuevo. Puede saltar de un lado a otro entre los contenidos de varias confirmaciones y hacer un poco de tiempo de viaje..

Tienes algunas opciones a tu disposición con git reset. Puede ir duro, suave y mixto, y también puede operar y mantener objetos de confirmación o hacerlo a nivel de archivo individual. 

Cada una de estas tres variaciones afecta a árboles específicos que Git utiliza para manejar sus archivos y sus contenidos..

Cómo Git Reset afecta a los tres árboles

Hablando de forma metafórica, cada opción de restablecimiento cambia un árbol diferente, una parte diferente de cómo git guarda las instantáneas. 

Árboles, ¿de qué estamos hablando aquí? Git usa el directorio de trabajo, el índice (también conocido como área de preparación) y algo llamado HEAD para crear y recuperar confirmaciones.. 

El directorio de trabajo le permite cambiar los archivos que puede incluir en el índice. Esta área de preparación le permite ajustar y seleccionar lo que desea poner en su próxima confirmación. Un objeto de confirmación es una versión cifrada criptográficamente de su contenido. Tiene algunos metadatos agregados y apunta a confirmaciones previas que nos permiten hacer nuestros bits de viaje en el tiempo. 

HEAD es una referencia que apunta a tales objetos de confirmación. Es simplemente un puntero que se actualiza con cada nueva confirmación o cambio de rama. Puede moverlo y apuntar a cualquier punto en el tiempo con el objeto de confirmación.. 

Para obtener más información sobre los árboles y demás, mira mi video sobre los tres árboles y Git. Cubre el flujo de trabajo básico en Git y es una base sólida para comprender mejor la lógica de usar git reset.

Las diferentes opciones de reinicio explicadas

Ahora veamos las diferentes opciones..

Git reset - duro

Esto va todo el nueve metros. Primero moverá HEAD y actualizará el índice con el contenido de la confirmación que HEAD ahora apunta. Luego actualizará el directorio de trabajo con el contenido del índice, por lo que posiblemente destruirá el contenido que haya cambiado en el directorio de trabajo..

Por lo tanto, es la única versión de git reset que es un poco peligrosa si no sabes lo que estás haciendo. 

Reinicio de Git - mezclado

Esto moverá HEAD y también actualizará el índice con el contenido del compromiso deseado que HEAD no está apuntando. El directorio de trabajo no se ve afectado por esa operación..

La opción mixta es la opción predeterminada si no proporciona git reset con una opción. Siempre es seguro el directorio de trabajo, por lo que no hay que tener miedo de perder su trabajo. 

Git reset --- suave

Esta opción solo moverá HEAD y se detendrá justo allí. En efecto, esto deshará el último comando de git commit..

El directorio de trabajo y los archivos que pueden estar almacenados todavía no se ven afectados por esa operación. 

Usando una ruta de archivo

Con todas estas opciones para git reset, específicamente le dices a git dónde detener la reproducción, rebobinando el contenido y los archivos de los compromisos anteriores para especificar los árboles a los que quieres afectar. Podemos llevar esto un paso más allá y restablecer el programa con una ruta de archivo..

Si usas un camino, Git no moverá HEAD. ¿Por qué? Debido a que HEAD apunta a un objeto de confirmación, y no puede apuntar solo a un subconjunto de eso. En otras palabras, HEAD no apunta a archivos específicos sino a objetos comprometidos, que consisten en archivos de bloque y algunos metadatos. El índice y el directorio de trabajo, por otro lado, pueden direccionarse en segmentos de clases.

Solo el índice y el directorio de trabajo desempeñan un papel cuando se utiliza una ruta. Simplemente copia el contenido de un archivo en el índice y no puede hacer mucho más.. git resetear un archivo.ext asume que por defecto te refieres git reset --mezclado HEAD some-file.ext y no afectará el directorio de trabajo.

Por cierto, debido a que HEAD no se puede mover, la opción suave no tendría sentido. Digamos que ha estado trabajando en la versión 3 de un archivo y lo agregó al índice para su próximo comentario. Ahora quieres desestabilizar estos cambios. correr git resetear un archivo.ext para poner en escena ese archivo en particular.

Como resultado, el índice se rellenará con el estado de su archivo a partir de la versión 2, la versión de su última confirmación a la que está haciendo referencia HEAD. Los cambios que realizó en su archivo, versión 3, básicamente, todavía están disponibles en el directorio de trabajo. Aún puedes obtener estos cambios en la versión 3 de este archivo..

Entonces, ¿qué haces en efecto con git resetear un archivo.ext es que solo manipulas el índice. 

Restablecer vs Checkout

Qué pasa git reset - hard some-file.ext? ¿Por qué no podemos usar eso también?? 

Esta funcionalidad se logra mediante git checkout con un nombre de archivo. git checkout some-file.ext es en realidad lo que git reset - hard some-file.ext Lo haría, pero Git no nos deja usar la opción difícil..

Vamos a dar un paso más. Podemos dirigirnos a cualquier confirmación para restablecer un archivo específico, no solo el más reciente representado por HEAD. Esto restablece los archivos de destino en el índice al estado de un determinado compromiso, de nuevo sin afectar el directorio de trabajo o cualquier compromiso.

Una vez que haya restablecido el índice al estado de un determinado compromiso, puede usar una actualización al revés, puede usar git checkout con un nombre de archivo para ver el contenido del índice en su directorio de trabajo. 

¿Por qué usar el checkout? Porque git reset - hard Con un archivo no es algo que Git te permita hacer..

Pero ten cuidado. Utilizando git checkout con una ruta de acceso al archivo eliminará sus cambios más recientes en su directorio de trabajo y lo reemplazará con la versión del archivo en ese compromiso específico.

Mira más cursos de Git

Si has encontrado esto útil, ¿por qué no echa un vistazo a algunos más cursos de Git??

Puede ver nuestra Introducción a Git y GitHub o probar los otros cursos de Coffee Break de esta serie:

  • Conceptos básicos de Git: Los tres árboles
  • Conceptos básicos de Git: Solicitudes de extracción de GitHub
  • Fundamentos de Git: Ramas
  • Conceptos básicos de Git: Estados
  • Fundamentos de Git: Fusionar y Rebase