PROGRAMADOR
EN PROCESO | Blog

Actualizado: 31-Ene-2024

Autor: Emmanuel Josué

Comprendiendo las áreas o estados de git

Para poder utilizar los comandos de git y entenderlos es importante entender los estados que pueden tener los archivos o dicho de otra forma las áreas en donde puede estar cada archivo, yo entendí esto creando unos gráficos, espero te sirvan junto con la explicación.

Para empezar debemos entender los siguientes comandos básicos

Git init : Inicializa un repositorio de git el cual nos permitirá empezar a utilizar todos los comandos de git, puedes utilizarlo en una carpeta en donde ya existen archivos o en una carpeta en donde empezaras a crear archivos para tu proyecto.

Ejemplo:
Nos encontramos en una carpeta llamada "git" la cual no tiene archivos

Creamos un archivo en la carpeta para ejemplos del comando git status

  1. Git status : Este comando nos indica en qué estado esta nuestro archivo o dicho de otra forma en qué área se encuentra, los tipos de áreas las veremos a continuación. Este comando nos puede mostrar tres estados o áreas las cuales enlistamos a continuación:

    1. Sin seguimiento o no rastreado (untracked)
  2. 2. Modificado (veremos un ejemplo más adelante)

  3. 3. Agregado al área de preparación

Ya que entendimos estos comandos pasemos al tema principal, cuando utilizamos el comando git init git creara tres áreas, llamadas "Directorio de trabajo" (working directory), "Área de preparación" (Staging area) y "Repositorio" (repository), en las cuales gestionara los archivos o los estados de estos, visualmente las áreas las podrías imaginar de la siguiente forma

Directorio de trabajo (working directory)

Explicaremos cada área empezando por la de Directorio de trabajo, esta área es en donde se reflejaran los cambios que le hagas a los archivos y los archivos nuevos que crees, si creas un archivo nuevo git lo identificara como un archivo no rastreado esto quiere decir que git no tiene conocimiento de este, no tiene ningún registro de dicho archivo, al principio todos serán así para git, lo podemos verificar utilizando el comando git status, la salida de este comando será algo así:

Graficamente lo podemos imaginar así

Una vez este archivo pase por las dos áreas restantes, área de preparación y repositorio, las cuales explicaré más adelante, los cambios que realicemos a los archivos que existan en el repositorio se reflejarán es esta área, utilizando el comandogit status podemos ver como se visualizaran los archivos que existen en el repositorio y son modificados, este es el estado de modificación que te mencione al principio

Quiero que observes que ahora la palabra no es untracked sino ahora es changes y ahora también aparece la palabra modified, esto nos indica que git ha detectado los cambios realizados. Siempre que realicemos cambios en un archivo, primero aparecerán en esta área y una vez que queramos guardar los cambios realizados en un commit, debemos colocar previamente los archivos con los cambios que queremos guardar en el área de preparación de la cual hablaremos a continuación

Área de preparación (Staging area)

Es una área en donde colocaremos los archivos con los cambios que queremos en el siguiente commit, creo que lo puedo explicar de otra forma para mostrar para qué sirve esta área, digamos que tienes 10 archivos y en todos realizaste cambios, ahora quieres guardar cambios y que queden registrados en un commit, pero solo quieres guardar los cambios de 4 archivos y no de los 10 porque en los 6 restantes los cambios que has realizado aún no están completos, para separar los cuatro archivos modificados del resto y solo guardar estos 4 archivos en el commit, los debemos agregar en el área de preparación, esta área es como un filtro para colocar solo los archivos con cambios que quieres guardar en el commit mientras que el resto, los 6 archivos, permanecerán en el área de directorio de trabajo o si por el contrario quieres guardar los cambios realizados en los 10 archivos, de igual forma debes colocarlos en el área de preparación stagin área

¿Cómo pasamos los archivos del área de Directorio de trabajo al área de preparación ?

Utilizamos el comando git add . este comando se utiliza para mover los archivos con cambios o los archivos nuevos al área de preparación, existen muchas formas de utilizar este comando, pero por el momento veremos solo dos formas;


  1. 1. git add nombre_del_archivo: Colocara en el área de preparación el archivo que le indiques

  2. 2. git add . : Colocara en el área de preparación todos los archivos con cambios y archivos nuevos en el área de preparación


Pero antes de ejecutar esto vamos a editar, con ayuda de vim, el archivo "muebles.txt" y colocar un texto, puedes colocar el que quieras, yo para este ejemplo coloque la palabra "ropero"

Luego de guardar el texto vamos a utilizar el comando "git status" para ver que el archivo sigue sin ser rastreado

Ahora ejecutaremos el comando git add muebles.txt

Y un git status para ver lo que ha pasado

Podemos ver que ahora el nombre del archivo está en verde y que nos sale un mensaje que dice "cambios para el commit", nuestro archvio ahora está en el área de preparación, visualmente lo podríamos ver así

Una vez pasamos los archivos con cambios al área de preparación el siguiente paso es realizar nuestro primer commit y con esto pasar nuestros cambios al área del repositorio .

Repositorio (repository)

El área de repositorio o el repositorio es donde existirán nuestros commit que son como fotografías de nuestro proyectos que tienen los cambios que han sufrido a lo largo del desarrollo del proyecto. Tratare de expresar esto con los siguientes gráficos y continuando con el archivo que tenemos el cual ha llegado al area de preparación

Y tiene en su interior la palabra "ropero" que trataremos de representar visualmente así

Ahora para llevarla al área de repositorio necesitamos aplicar un commit esto lo hacemos con el siguiente comando
git commit -m "Primer commit"

Al ejecutar el comando se han guardado todos los cambios en este commit, podemos pensar que se ha tomado una foto del proyecto con los cambios realizados algo así… bueno antes veremos que el archivo esta en el area del repositorio

Veámoslo más de cerca

Ahora imaginemos visualmente lo que hay en su interior

En este punto podemos imaginar que el commit se ve algo así

Ahora viene una parte muy importante a entender ya que una vez echo cada commit ahora los cambios que realicemos en los archivos ya existentes tendrán o lucirán como en el ultimo commit que hemos realizado, en nuestro ejemplo el ultimo commit es el commit 1 llamado "Primer commit" si realizamos un cambio al archivo muebles.txt lo que pasara es que el cambio se vera reflejado en el directorio de trabajo, digamos que editamos el archivo y le agregamos la palabra sillón, git detectara esto y reflejara dichos cambios en el directorio de trabajo. Agregamos la palabra al archivo

y aplicamos el comando git status

Visualmente podemos imaginarlo algo así

Digamos que las modificaciones se agregaran a una versión del archivo existente en el último commit, en nuestra representación gráfica podemos ver que nuestra fotografía o primer commit no se verá afectado por las modificaciones sino que quedara guardado por si en algún momento queremos regresar a esa versión del proyecto si es que los cambios que realizamos no son satisfactorios o simplemente queremos ir a ese commit a ver cómo era algo en ese momento del proyecto. Continuando con nuestro ejemplo el archivo con las modificaciones deberá pasar por el mismo proceso anterior, lo colocaremos en el área de preparación con ayuda del comando git add nombre_del_archivo

Una vez aplicado el comando git add podemos ver que nuestro archivo ha pasado al área de preparación

luego en un commit aplicando el comando git commit -m "mensaje descriptivo sobre el cambio" para que de esta forma se guarden los nuevos cambios, podemos imaginarlo de esta forma al final del segundo commit

El commit 2 es el ultimo commit realizado, es decir que este es el commit más reciente, el repositorio y sus commit (fotografías de los estados que ha tenido el proyecto) nos sirven para poder guardar y ver, si lo requerimos, una versión o estado de nuestro proyecto y permitirnos regresar a un punto si es que así lo deseamos