Qué es el staging area

Hoy me centro en detalle en lo que comencé a explicar en el episodio anterior. En qué estados se pueden encontrar los archivos en nuestro repositorio de Git.

Cuando trabajamos con Git, es fundamental entender qué ocurre detrás de cada commit y por qué necesitamos realizar ciertos pasos para registrar nuestros cambios. En primer lugar, tenemos el directorio de trabajo, que es la carpeta donde hacemos todas nuestras modificaciones. Cuando creamos un commit, Git guarda un estado concreto de esos archivos, pero antes de llegar a ese punto, hay un paso intermedio muy importante: el área de staging o stage.

El stage es un espacio temporal donde colocamos los cambios que queremos incluir en nuestro próximo commit. Esto se hace con el comando git add, que puede aplicarse a archivos específicos o a todos los cambios con un punto (git add .). La utilidad principal de esta etapa es que nos permite seleccionar con precisión qué modificaciones queremos confirmar, lo que resulta especialmente útil cuando hemos hecho varios cambios y queremos organizarlos en commits separados y atómicos.

Para visualizar el historial de commits, usamos git log, que nos muestra una lista con cada commit realizado, identificados por un hash SHA1 único. Este hash se genera a partir del contenido del commit, incluyendo el mensaje y los archivos, lo que garantiza la integridad y unicidad de cada cambio. Si alguien intentara modificar un commit anterior, Git detectaría la inconsistencia en el hash, asegurando así la seguridad del historial.

Cuando hacemos cambios en nuestro directorio de trabajo, Git nos indica con git status si hay modificaciones que aún no están en el stage. Por ejemplo, si editamos un archivo y añadimos una línea como estamos en construcción, ese cambio aparecerá como modificado pero no staged. Para ver exactamente qué hemos cambiado, podemos usar git diff, que muestra las líneas añadidas en verde y las eliminadas en rojo.

Es importante entender que solo los cambios que hemos añadido al stage con git add serán incluidos en el siguiente commit. Si hacemos más modificaciones después de añadir un archivo al stage, esas nuevas modificaciones no se incluirán hasta que volvamos a hacer git add. Esto nos da un control muy fino sobre qué cambios confirmamos y cuáles dejamos para después.

En caso de que olvidemos añadir algún cambio antes de hacer un commit, Git nos ofrece una solución práctica con el comando git commit --amend. Este comando nos permite modificar el último commit, añadiendo los cambios que nos hayamos dejado fuera sin necesidad de crear un commit nuevo. Al hacer esto, el hash del commit cambia, reflejando que el contenido ha sido modificado. Sin embargo, esta operación solo es posible con el commit más reciente, ya que modificar commits anteriores implicaría cambiar toda la cadena de commits posteriores, lo que es mucho más complejo y requiere técnicas avanzadas como la reescritura del historial.

En resumen, el flujo habitual con Git implica trabajar en el directorio de trabajo, seleccionar los cambios que queremos confirmar con git add para colocarlos en el stage, y finalmente hacer el commit con git commit. Este proceso nos da flexibilidad y control para mantener un historial limpio y organizado, facilitando la colaboración y el mantenimiento de nuestros proyectos.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos