Para entender los commits, hay que visualizar primero las tres zonas por las que Git hace transitar tus archivos.
| Zona | Descripción | Comando para entrar |
|---|---|---|
| Directorio de trabajo | Tus archivos tal como los editas | (edición directa) |
| Zona de staging (índice) | Los cambios que preparas para registrar | git add |
| Repositorio local | El historial permanente de los commits | git commit |
Analogía: preparar un paquete. El directorio de trabajo es tu escritorio desordenado; la zona de staging es la caja donde pones lo que quieres enviar; el commit es el momento en que sellas la caja y la archivas.
Para transformar una carpeta ordinaria en repositorio Git:
# Situarse en la carpeta del proyecto
cd mon-projet
# Inicializar el repositorio
git initEso crea una subcarpeta oculta .git/ que contiene todo el historial y la configuración del repositorio.
# Verificar el estado del repositorio recién creado
git status⚠️ Nunca borres la carpeta
.git/: contiene todo el historial. Borrarla equivale a perder el versionado (pero no tus archivos actuales).
🔧 Mini-ejercicio — Escribe el comando que transforma la carpeta actual en repositorio Git, luego el que muestra su estado.
git init
git statusUn archivo puede estar seguido (tracked) o no seguido (untracked) por Git.
# Preparar un archivo preciso
git add fichier.txt
# Preparar todos los cambios de la carpeta
git add .
# Ver el estado (seguido / no seguido / preparado)
git status| Comando | Efecto |
|---|---|
git add fichier.txt | Prepara un archivo preciso |
git add . | Prepara todos los archivos modificados/nuevos |
git restore --staged fichier.txt | Retira un archivo de la zona de staging |
git status | Muestra el estado de cada archivo |
git statuses tu mejor amigo: úsalo antes y después de cadagit addpara ver exactamente lo que Git se dispone a registrar.
🔧 Mini-ejercicio — Acabas de modificar index.html y style.css. Escribe el comando que prepara (stage) solo index.html.
git add index.htmlUn commit es una instantánea (snapshot) de tu proyecto en un instante dado, acompañada de un mensaje que explica el cambio.
# Preparar y luego registrar
git add .
git commit -m "Añade la página de inicio"Cada commit posee:
| Elemento | Descripción |
|---|---|
| Un identificador (hash) | Ej. a1b2c3d… — único |
| Un autor | Tu nombre + correo (config de la lección 03) |
| Una fecha | Marca de tiempo del commit |
| Un mensaje | La descripción del cambio |
| Un padre | El commit anterior (cadena de historial) |
# Ver el historial de los commits
git log
git log --oneline # versión compactaUn buen commit es atómico: hace una sola cosa coherente. Evita el commit cajón de sastre «un montón de cosas» — prefiere varios commits pequeños y claros.
🔧 Mini-ejercicio — Prepara todos tus cambios y crea un commit cuyo mensaje sea «Añade la página de contacto».
git add .
git commit -m "Añade la página de contacto"El mensaje de commit cuenta la historia del proyecto. Un buen mensaje ahorra horas a todo el equipo (y a ti mismo dentro de 6 meses).
| ❌ Mal mensaje | ✅ Buen mensaje |
|---|---|
update | Actualiza la dependencia Maven a 3.9 |
fix bug | Corrige el crash al arrancar si falta la config |
wip | Añade la validación del formulario de conexión |
feat: añade la autenticación por token
fix: corrige la paginación de los resultados
docs: completa el README de instalaciónTruco mnemotécnico: un buen mensaje debe completar la frase «Si aplico este commit, va a…». Ejemplo: «…añadir la página de inicio».
Algunos archivos nunca deben versionarse: archivos temporales, dependencias voluminosas, secretos, archivos compilados. El archivo .gitignore indica a Git que los ignore.
# Ejemplo de contenido de un archivo .gitignore
target/
node_modules/
*.log
.env
.DS_Store| Qué ignorar | Por qué |
|---|---|
node_modules/, target/ | Se reconstruyen automáticamente, voluminosos |
.env, *.key | Secretos — ¡nunca en Git! |
*.log, *.tmp | Archivos temporales sin valor |
⚠️ Regla de oro de seguridad: nunca hagas commit de contraseñas, claves API o secretos. Una vez en el historial Git, un secreto se queda — aunque lo borres después. Pon
.enven.gitignoredesde el principio.
🔧 Mini-ejercicio — Escribe la línea a añadir en un .gitignore para impedir que Git versione el archivo de secretos .env.
.envQuestion 1: ¿Qué comando transforma una carpeta ordinaria en repositorio Git?
a) git start
b) git init
c) git new
d) git create
✅ Respuesta: b) — git init crea la subcarpeta .git/ que contiene el historial y convierte la carpeta en repositorio.
Question 2: ¿Cuál es el orden correcto de las tres zonas de Git?
a) Repositorio → staging → directorio de trabajo
b) Directorio de trabajo → staging → repositorio local
c) Staging → repositorio → directorio de trabajo
d) Directorio de trabajo → repositorio → staging
✅ Respuesta: b) — Se edita (directorio de trabajo), se prepara con git add (staging) y luego se registra con git commit (repositorio local).
Question 3: ¿Para qué sirve git add?
a) Para crear un commit
b) Para preparar cambios en la zona de staging
c) Para borrar un archivo
d) Para enviar el código a GitHub
✅ Respuesta: b) — git add mueve los cambios del directorio de trabajo a la zona de staging, antes del commit.
Question 4: ¿Cuál es un buen mensaje de commit?
a) truc
b) wip
c) Corrige el crash al arrancar si falta la config
d) .
✅ Respuesta: c) — Es claro, en imperativo, y explica el cambio. Los demás son vagos e inútiles en el historial.
Question 5: ¿Por qué usar un .gitignore?
a) Para acelerar el ordenador
b) Para impedir que Git versione ciertos archivos (temporales, secretos, dependencias)
c) Para borrar el historial
d) Para ignorar los commits
✅ Respuesta: b) — .gitignore lista los archivos que Git debe ignorar, en especial los secretos (.env) y las carpetas reconstruibles (node_modules/).
Crea un repositorio local, añade un archivo, ignora un archivo secreto, y haz dos commits limpios.
# 1. Crear y entrar en la carpeta
mkdir mon-premier-depot
cd mon-premier-depot
# 2. Inicializar el repositorio
git init
# 3. Crear un archivo de contenido y un .gitignore
echo "# Mi proyecto" > README.md
echo ".env" > .gitignore
echo "SECRET=123" > .env # este archivo debe ignorarse
# 4. Verificar el estado (.env NO debe aparecer)
git status
# 5. Primer commit
git add README.md .gitignore
git commit -m "Inicializa el proyecto con README y gitignore"
# 6. Modificar y segundo commit
echo "Descripción del proyecto" >> README.md
git add README.md
git commit -m "Completa la descripción en el README"
# 7. Consultar el historial
git log --onelineResultado esperado:
b2c3d4e Completa la descripción en el README
a1b2c3d Inicializa el proyecto con README y gitignoreVerifica que
.envnunca aparece engit status: es la prueba de que tu.gitignorefunciona y de que tu secreto está protegido.
git add) → repositorio local (git commit).git init crea el repositorio (carpeta .git/)..gitignore protege los secretos y excluye los archivos inútiles.Lección 07 — Ramas e historial: trabajar en varias versiones en paralelo sin romper la versión principal.
Todos los derechos reservados. Toda reproducción, difusión, uso o adaptación de este curso, en todo o en parte, está estrictamente prohibida sin la autorización escrita previa del Dr. Haythem REHOUMA.
Curso creado por Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos