Saltar al contenido principal
Principiante CódigoTutorial

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.

Fran Cobos 9 min de lectura 1624 palabras

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:

  1. Setup inicial (una sola vez)
  2. Flujo diario (add → commit → push)
  3. Ramas y merge
  4. Deshacer cosas (sin entrar en pánico)
  5. 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"
TipoCuándo usarlo
featNueva funcionalidad
fixCorregir un bug
docsSolo documentación
styleFormato, sin cambiar lógica
refactorReestructurar sin cambiar comportamiento
testAñadir o corregir tests
choreTareas 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:

  1. Elige qué versión mantener (o combina ambas)
  2. Elimina los marcadores <<<<<<<, =======, >>>>>>>
  3. 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 hacerComando
Ver estadogit status
Añadir cambiosgit add .
Hacer commitgit commit -m "msg"
Subir cambiosgit push origin main
Bajar cambiosgit pull origin main
Crear ramagit switch -c feature/x
Cambiar ramagit switch main
Mergeargit merge feature/x
Deshacer commitgit reset --soft HEAD~1
Guardar temporalgit stash
Historialgit 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.

Fran Cobos

Fran Cobos

Desarrollador Full Stack especializado en IA aplicada, automatización y desarrollo web. Escribo sobre herramientas, tutoriales y casos reales para programadores.

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.