Comandos Git Esenciales — Cheat Sheet para Desarrolladores 2026
Los comandos Git que vas a usar el 99% del tiempo, explicados con ejemplos reales. Incluye resolución de conflictos, deshacer cambios, y los errores típicos de principiantes.
Tabla de contenidos
Va a sonar duro, pero el 90% de los problemas que veo en proyectos de estudiantes tienen que ver con Git, no con el código. He recopilado los comandos que realmente vas a usar todos los días, sin la teoría que no necesitas ahora mismo.
TL;DR — Estructura de esta guía:
- Setup inicial (una sola vez)
- Flujo diario (add → commit → push)
- Ramas y merge
- Deshacer cosas (sin entrar en pánico)
- Los errores más comunes y cómo salir vivo
Setup inicial (solo la primera vez)
Antes de nada, configura tu identidad. Estos datos aparecen en cada commit:
# Configurar nombre y email (obligatorio, se usa en cada commit)
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
# Ver tu configuración actual
git config --list
# Iniciar un repositorio nuevo en la carpeta actual
git init
# O clonar uno existente (GitHub, GitLab, etc.)
git clone https://github.com/usuario/repo.git
El flujo diario: add → commit → push
Esto es lo que vas a hacer 50 veces al día. Memorízalo:
# 1. Ver qué archivos has modificado
git status
# 🔴 rojo = modificado pero no añadido al staging
# 🟢 verde = añadido al staging, listo para commit
# 2. Añadir archivos al staging (área de preparación)
git add archivo.js # Un archivo específico
git add src/ # Todo el contenido de una carpeta
git add . # TODO lo modificado (cuidado con esto)
git add -p # Seleccionar cambios línea por línea (modo pro)
# 3. Hacer commit (guardar snapshot del código)
git commit -m "feat: añadir login con JWT"
# El mensaje importa. Luego veremos la convención de commits.
# 4. Subir al remoto (GitHub/GitLab)
git push origin main
# origin = nombre del remoto (por defecto)
# main = la rama que quieres subir
Convención de mensajes de commit
Los mensajes random tipo “cambios” o “asdf” dan mala imagen. Usa este formato:
# Formato: tipo: descripción breve
git commit -m "feat: añadir sistema de registro"
git commit -m "fix: corregir error en cálculo de precio"
git commit -m "docs: actualizar README con instrucciones"
git commit -m "style: formatear código con Prettier"
git commit -m "refactor: extraer lógica de validación"
git commit -m "test: añadir tests para servicio de pagos"
| Tipo | Cuándo usarlo |
|---|---|
feat | Nueva funcionalidad |
fix | Corregir un bug |
docs | Solo documentación |
style | Formato, sin cambiar lógica |
refactor | Reestructurar sin cambiar comportamiento |
test | Añadir o corregir tests |
chore | Tareas de mantenimiento (deps, config) |
Ramas: trabaja sin miedo
Las ramas te permiten desarrollar funcionalidades sin romper el código principal. En cualquier proyecto de más de una persona, son obligatorias.
# Ver todas las ramas (* = rama actual)
git branch
# Crear una rama nueva y moverte a ella
git checkout -b feature/login
# Equivalente moderno:
git switch -c feature/login
# Cambiar de rama
git checkout main
git switch main # Equivalente moderno
# Ver ramas remotas también
git branch -a
# Eliminar una rama (local, ya mergeada)
git branch -d feature/login
# Eliminar una rama (forzar, aunque no esté mergeada)
git branch -D feature/login-fallida
Merge: unir ramas
# 1. Moverte a la rama que va a RECIBIR los cambios
git checkout main
# 2. Hacer merge de la otra rama
git merge feature/login
# Si no hay conflictos → merge automático ✅
# Si hay conflictos → Git te avisa y tú los resuelves
Resolver conflictos de merge (sin pánico)
Los conflictos pasan cuando dos personas tocan las mismas líneas. Git no sabe cuál elegir y te pide que decidas tú.
# Después de un merge con conflictos, Git te muestra:
# CONFLICT (content): Merge conflict in archivo.js
# Automatic merge failed; fix conflicts and then commit.
Abre el archivo en conflicto. Verás algo así:
function calcularPrecio(cantidad) {
<<<<<<< HEAD
// Tu código (rama actual)
return cantidad * 19.99;
=======
// Código del compañero (rama que estás mergeando)
return cantidad * 24.99 * 0.9; // con descuento
>>>>>>> feature/precios
}
Qué hacer:
- Elige qué versión mantener (o combina ambas)
- Elimina los marcadores
<<<<<<<,=======,>>>>>>> - Guarda el archivo
# Después de resolver todos los conflictos:
git add archivo.js # Marcar como resuelto
git commit # Git sugiere un mensaje de merge automático
Deshacer cosas (la parte que más necesitas)
Deshacer cambios NO commiteados
# Descartar cambios en un archivo (volver a la versión del último commit)
git checkout -- archivo.js
# Equivalente moderno:
git restore archivo.js
# Quitar un archivo del staging (después de git add)
git reset HEAD archivo.js
# Equivalente moderno:
git restore --staged archivo.js
Deshacer commits
# Deshacer el último commit, MANTENER los cambios en staging
git reset --soft HEAD~1
# HEAD~1 = "un commit atrás". HEAD~3 = "tres commits atrás"
# Deshacer el último commit, MANTENER los cambios sin staging
git reset --mixed HEAD~1 # (--mixed es el default)
# ⚠️ Deshacer el último commit Y BORRAR los cambios (PELIGROSO)
git reset --hard HEAD~1
# Si haces esto por error: git reflog → buscar el hash → git reset --hard <hash>
# Cambiar el mensaje del último commit (solo si NO has hecho push)
git commit --amend -m "mensaje corregido"
Crear un commit que “deshace” otro (seguro para código publicado)
# Si ya hiciste push y necesitas deshacer, usa revert
git revert HEAD
# Crea un commit NUEVO que revierte los cambios del último
# No reescribe historia → seguro para equipos
Comandos de inspección
# Ver historial de commits
git log --oneline --graph
# --oneline = una línea por commit (más legible)
# --graph = muestra visualmente las ramas
# Ver cambios entre tu código y el último commit
git diff
git diff --staged # Solo cambios en staging
# Ver quién modificó cada línea (para cazar bugs)
git blame archivo.js
# Buscar un texto en todo el historial
git log -S "nombreFuncion" --oneline
Stash: guardar cambios temporalmente
A veces necesitas cambiar de rama pero tienes cambios sin commitear. Stash los guarda aparte:
# Guardar cambios actuales en el stash
git stash
# Ver la lista de stashes guardados
git stash list
# stash@{0}: WIP on feature/login: abc1234 último commit
# Recuperar los cambios guardados
git stash pop # Aplica y elimina el stash
git stash apply # Aplica pero mantiene el stash guardado
# Eliminar stash sin aplicarlo
git stash drop stash@{0}
.gitignore: archivos que NO deben subirse
Crea un archivo .gitignore en la raíz del proyecto:
# Dependencias (se regeneran con npm install / mvn install)
node_modules/
target/
# Variables de entorno (contraseñas, API keys)
.env
.env.local
# Archivos del IDE
.idea/
.vscode/
*.iml
# Compilados y builds
dist/
build/
*.class
# Sistema operativo
.DS_Store
Thumbs.db
desktop.ini
Si ya commiteaste un archivo que debería estar ignorado:
# Dejar de trackear un archivo (sin borrarlo del disco)
git rm --cached .env
git commit -m "chore: dejar de trackear .env"
Errores típicos que te darán el 0 en el examen
1. fatal: not a git repository
Causa: No estás dentro de un repositorio Git.
# Solución: inicializar o ir a la carpeta correcta
git init # Si es un proyecto nuevo
cd mi-proyecto/ # Si estás en la carpeta equivocada
2. error: failed to push some refs
Causa: El remoto tiene commits que tú no tienes.
# Solución: traer los cambios primero
git pull origin main --rebase
# Luego volver a push
git push origin main
3. fatal: refusing to merge unrelated histories
Causa: Intentas mergear dos repos que no comparten historial.
# Solución (solo si estás seguro de que quieres unirlos)
git pull origin main --allow-unrelated-histories
4. Subir node_modules/ o .env al repositorio
Esto es un error de seguridad si subes .env (contraseñas expuestas). Y node_modules/ puede tener miles de archivos innecesarios.
# Arreglar: añadir al .gitignore y dejar de trackear
echo "node_modules/" >> .gitignore
echo ".env" >> .gitignore
git rm -r --cached node_modules/
git rm --cached .env
git commit -m "chore: eliminar archivos que no deberían trackearse"
5. Hacer push --force a main
# ❌ NUNCA hagas esto en una rama compartida
git push --force origin main
# Sobreescribe el historial del remoto
# Los commits de tus compañeros desaparecen
# ✅ Si necesitas forzar, usa force-with-lease (más seguro)
git push --force-with-lease origin main
# Solo fuerza si nadie más ha pusheado mientras tanto
Cheat sheet resumido
| Qué quieres hacer | Comando |
|---|---|
| Ver estado | git status |
| Añadir cambios | git add . |
| Hacer commit | git commit -m "msg" |
| Subir cambios | git push origin main |
| Bajar cambios | git pull origin main |
| Crear rama | git switch -c feature/x |
| Cambiar rama | git switch main |
| Mergear | git merge feature/x |
| Deshacer commit | git reset --soft HEAD~1 |
| Guardar temporal | git stash |
| Historial | git log --oneline --graph |
Si te peleaste con un error de Git que no sale aquí, pégalo en el traductor de errores — te dice qué significa y cómo solucionarlo en español.
¿Buscas ideas para tu TFG? Mira las 10 mejores ideas de proyecto final para DAW y DAM con stack recomendado.