Qué es Git — registrar los cambios para poder volver atrás

Este artículo forma parte del curso Fundamentos de informática, que construye desde cero los conocimientos prácticos de informática que necesitas como mínimo para programar y hacer vibe coding.
Al guardar encima no queda nada del estado anterior. Con diagramas seguimos el recorrido que va desde dejar un registro con un commit hasta sacar un momento anterior de los registros acumulados en el repositorio.

Este artículo trata de Git.

Git es un mecanismo que registra los cambios de los archivos para poder volver a un estado anterior y, si dejas esos registros en un servidor, también puedes quedar en el mismo estado que otra persona.

Los registros que aparecen en los tres lugares son los mismos: se igualan poniendo un servidor en medio.

Qué hace Git — dejar registros y compartirlos con un remoto

Registrar los cambios de los archivos momento a momento para poder recuperar un estado pasado es el control de versiones (version control).

El lugar donde se guardan esos registros es el repositorio (repository), lo mismo puesto en el servidor es el repositorio remoto (remote repository) y cada registro es un commit.

Los servicios más conocidos para alojar un repositorio remoto son GitHub y GitLab, y GitHub no es Git en sí, sino un lugar donde poner un repositorio remoto.

Tu computadora y el servidor de GitHub
Tu computadora
La carpeta my-app
Archivos en los que trabajas
  • app.js y style.css
  • Al guardar encima, el contenido se reemplaza
Repositorio
  • Los commits se ordenan del más antiguo al más nuevo
  • git commit añade uno
Servidor de GitHub
El repositorio remoto de my-app
  • Aquí se acumulan los commits enviados con git push
  • https://github.com/example/my-app.git es ese lugar
  • Se puede leer y escribir desde otra computadora
A la izquierda está tu computadora y a la derecha el servidor de GitHub. El repositorio que está dentro de la carpeta my-app y el repositorio remoto del servidor están en lugares distintos y los dos guardan commits.

Enviar al servidor los registros de tu computadora es un push y traer los registros del servidor es un pull.

Como hay un servidor en medio, el contenido es el mismo sin importar cuándo lo traiga el compañero.

Las frases sobre Git que aparecen en las instrucciones son de tres tipos.

Lo que dicen las instrucciones y la operación de Git que le corresponde
===«Haz un commitde lo que llevas»«Súbelo aGitHub»«Trae los últimoscambios»CommitPushPullSe registra elcambio de app.jsEl registro seenvía al servidorTraes el registrodel servidorSolo dentro de tucomputadoraTú → GitHubGitHub → tú
Cada fila es una operación. De izquierda a derecha: lo que dicen las instrucciones, el nombre de la operación, lo que ocurre entonces y hasta dónde llega. Solo la fila de arriba termina por completo dentro de tu computadora.

La columna de la izquierda se queda dentro de tu computadora, mientras que la del centro y la de la derecha intercambian datos con GitHub.

Al guardar encima no queda el estado anterior — qué registra el control de versiones

Guardar encima es reemplazar el contenido de app.js por el contenido actual.

Después de reemplazarlo no queda nada del contenido anterior, así que por mucho que guardes no puedes volver a un estado anterior.

Qué hiciste antes de editarDónde está el contenido anteriorDespués de que deja de funcionar
Solo guardaste encimaEn ningún lugarNo puedes volver
Dejaste el editor abiertoEl historial de deshacer (se pierde al cerrarlo)Puedes deshacer las ediciones hechas mientras está abierto
Ejecutaste git commitEl registro del repositorioPuedes volver en cualquier momento

El contenido anterior solo queda en el repositorio cuando has hecho un commit.

Lo único que marca la diferencia es si ejecutaste git commit una vez antes de editar.

Esa única vez crea un momento al que puedes volver.

Solo el commit deja un registro

Guardar encima borra el contenido antiguo con el actual y lo que se borra no queda en ningún lugar de la computadora.

El commit añade un registro del app.js tal como está en ese momento, sin borrar nada, así que cuando algo deja de funcionar los únicos momentos a los que puedes volver son aquellos en los que hiciste un commit.

El commit tiene dos etapas: elegir los cambios que se registran y después dejar el registro

El commit se divide en dos etapas: primero eliges y después registras.

La etapa de elegir y añadir es el staging (la etapa en la que eliges y añades los cambios que se incluyen en el commit), y por estas dos etapas, dentro de la carpeta my-app hay tres lugares por los que pasa un cambio.

Los tres lugares por los que pasa un cambio dentro de la carpeta my-app
my-app (la carpeta de la app de reservas que estás creando)
Archivos en los que trabajas
  • app.js — el contenido que tienes abierto ahora en el editor
  • style.css — el archivo que describe cómo se ve la pantalla
  • Al guardar encima, se reemplaza el contenido de aquí
La carpeta propia que crea Git
Staging
  • Guarda los cambios elegidos con git add
  • Vuelve a quedar vacío cuando ejecutas git commit
Repositorio
  • Los commits se ordenan del más antiguo al más nuevo
  • git commit añade uno
El marco exterior es la carpeta my-app. Arriba están los archivos que tienes abiertos ahora en el editor y abajo está la carpeta propia que crea Git, que contiene el staging y el repositorio.

El cambio pasa de arriba abajo en dos pasos: git add y git commit.

El cambio de index.html que no elegiste no se pierde y puedes elegirlo la próxima vez.

Los pasos para comprobar antes de registrar salen en estas tres líneas.

# Comprueba qué archivos editaste
git status

# Elige y añade los cambios que se van a registrar
git add app.js

# Registra los cambios elegidos con un mensaje corto
git commit -m "Añadir la pantalla de inicio de sesión"

Si ejecutas git status aparecen los nombres de los archivos que editaste, y con git log sale la lista de los registros.

Si ejecutas git commit sin haber ejecutado git add, no hay ningún cambio elegido, así que no se crea ningún registro.

Elige qué registrar antes de registrarlo

El commit tiene dos etapas: elegir y registrar.

Con git add eliges los cambios que entran en este registro y con git commit solo lo elegido se convierte en un registro, así que si olvidas la parte de elegir no se añade ningún registro.

El repositorio está dentro de la carpeta y los commits se ordenan del más antiguo al más nuevo

La carpeta propia que contiene el repositorio se crea en el momento en que ejecutas git init, que empieza a registrar en esa carpeta.

Cada vez que haces un commit, los registros que hay dentro aumentan de uno en uno.

Los commits que se acumulan dentro del repositorio
Repositorio (dentro de la carpeta propia que crea Git)
El primer commit
  • El app.js del momento en que creaste la pantalla
  • La fecha y la hora y el mensaje «Crear la pantalla»
El segundo commit
  • El app.js y el style.css del momento en que añadiste los campos de entrada
  • La fecha y la hora y el mensaje «Añadir los campos de entrada»
El último commit
  • El app.js registrado más recientemente
  • La fecha y la hora y el mensaje «Añadir la pantalla de inicio de sesión»
El marco exterior es el repositorio. Los commits de dentro se ordenan desde arriba del más antiguo al más nuevo, y registrar uno nuevo no reescribe los commits anteriores.

Volver atrás es elegir uno de los registros guardados ahí y reemplazar con su contenido el app.js en el que trabajas.

Para los archivos que no quieres registrar, puedes escribir sus nombres en un archivo de configuración llamado .gitignore dentro de la carpeta.

Con esto los archivos que todavía no se han registrado dejan de registrarse, y no tiene efecto sobre un archivo que ya se registró una vez.

Los registros no se pierden: se ordenan del más antiguo al más nuevo

El repositorio está dentro de la carpeta propia que hay en la carpeta my-app.

Cada vez que haces un commit los registros aumentan de uno en uno y los registros anteriores nunca se reescriben, así que volver atrás es elegir uno de los registros guardados ahí y hacer que el archivo actual tenga su contenido.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de estas afirmaciones sobre la diferencia entre guardar encima y hacer un commit es correcta?

Pregunta 2El commit se divide en dos etapas. ¿Cuál es la etapa que va antes de dejar el registro?

Pregunta 3¿Qué operación envía un commit que dejaste en el repositorio de tu computadora al repositorio remoto que está en un servidor?