Comandos Esenciales de Git
Los comandos que usas a diario — staging, commits, ramas e inspección del historial.
Receta
Tarjeta de referencia rápida — lista para copiar y pegar.
# Inicializa un repositorio nuevo
git init
# Verifica el estado actual
git status
# Prepara archivos específicos
git add file1.tsx file2.tsx
# Prepara todos los cambios
git add .
# Realiza un commit con mensaje
git commit -m "feat: add user profile component"
# Ve el historial de commits
git log --oneline --graph
# Crea y cambia a una rama nueva
git checkout -b feature/new-component
# Cambia a una rama existente
git checkout main
# o (moderno)
git switch mainCuándo usarlo: Cada vez que escribes código. Estos comandos son la base de todos los flujos de trabajo de Git.
Ejemplo Práctico
# Flujo típico de desarrollo de una funcionalidad
git checkout -b feature/auth-page
# ... escribe código ...
git status
git add src/app/auth/page.tsx src/app/auth/layout.tsx
git commit -m "feat: add authentication page with login form"
git push -u origin feature/auth-pageLo que esto demuestra:
- Crea una rama de funcionalidad desde tu rama actual
- Prepara solo los archivos que pretendes incluir en el commit (evita
git add .cuando sea posible) - Escribe un mensaje de commit descriptivo con un prefijo convencional
- Envía y establece la rama de seguimiento upstream en un comando
Análisis Profundo
Área de Staging (Índice)
El área de staging es el paso intermedio único de Git entre tu directorio de trabajo y el repositorio.
# Prepara archivos específicos
git add src/components/Button.tsx
# Prepara partes de un archivo (selección interactiva de fragmentos)
git add -p src/components/Button.tsx
# Deshace el staging de un archivo (mantiene los cambios en el directorio de trabajo)
git restore --staged src/components/Button.tsx
# Descarta los cambios en el directorio de trabajo
git restore src/components/Button.tsxMejores Prácticas de Commits
# Prefijos convencionales de commits
git commit -m "feat: add dark mode toggle"
git commit -m "fix: resolve hydration mismatch in sidebar"
git commit -m "refactor: extract shared form validation logic"
git commit -m "docs: update API route documentation"
git commit -m "chore: upgrade next to 15.1.0"
git commit -m "test: add integration tests for checkout flow"
# Mensaje de commit multilínea
git commit -m "feat: add user dashboard
- Add profile summary card
- Add recent activity feed
- Add quick action buttons"Inspeccionar el Historial
# Log compacto con gráfico
git log --oneline --graph --all
# Muestra los cambios en un commit específico
git show abc1234
# Muestra quién modificó cada línea por última vez
git blame src/app/layout.tsx
# Busca en los mensajes de commit
git log --grep="auth" --oneline
# Muestra commits que modificaron un archivo específico
git log --oneline -- src/app/auth/page.tsx
# Muestra la diferencia entre ramas
git diff main..feature/auth-pageRamas
# Lista todas las ramas (locales)
git branch
# Lista todas las ramas (incluyendo remotas)
git branch -a
# Crea una rama sin cambiar a ella
git branch feature/sidebar
# Elimina una rama fusionada
git branch -d feature/sidebar
# Elimina una rama sin fusionar (fuerza)
git branch -D feature/abandoned
# Renombra la rama actual
git branch -m new-nameTrampas Mortales
Cosas que te van a morder. Cada trampa mortal incluye qué sale mal, por qué sucede y cómo arreglarlo.
-
Commitear en la rama equivocada — Escribes código en
mainen lugar de en una rama de funcionalidad. Solución:git stash, luegogit checkout -b feature/correct-branch, luegogit stash pop. -
Olvidar hacer pull antes de push — El push se rechaza porque el remoto tiene commits nuevos. Solución:
git pull --rebasepara reproducir tus commits sobre los cambios remotos más recientes. -
Preparar accidentalmente secretos —
.envo credenciales se agregan al staging. Solución:git restore --staged .envantes de hacer commit. Agrega.enva.gitignoreinmediatamente. -
Estado de HEAD separado — Hiciste checkout a un hash de commit en lugar de a un nombre de rama. Solución:
git checkout -b my-branchpara crear una rama en ese commit, ogit checkout mainpara volver. -
Archivos grandes inflando el repositorio — Commitear
node_moduleso artefactos de construcción. Solución: Agrega estos a.gitignoreantes del primer commit. Si ya están committeados, usagit rm -r --cached node_modules.
Alternativas
Otras formas de resolver el mismo problema — y cuándo cada una es la mejor opción.
| Alternativa | Úsalo cuando | No lo uses cuando |
|---|---|---|
git switch / git restore | Git moderno (2.23+) — intención más clara que checkout | Versiones antiguas de Git o memoria muscular |
git stash | Cambio de contexto rápido sin hacer commit del WIP | Quieres un registro permanente del estado WIP |
git worktree | Trabajas en dos ramas simultáneamente | Flujos de trabajo simples de una sola rama |
Preguntas Frecuentes
¿Cuál es la diferencia entre git add . y git add file.tsx?
git add .prepara todos los cambios en el directorio actual y subdirectoriosgit add file.tsxprepara solo ese archivo específico- Prefiere preparar archivos específicos para evitar commitear accidentalmente cambios no deseados (p. ej., archivos
.env)
¿Cuándo debo usar git switch en lugar de git checkout?
git switchse introdujo en Git 2.23+ para aclarar la intención de cambiar de ramagit checkoutestá sobrecargado: cambia ramas Y restaura archivos- Usa
git switchpara ramas,git restorepara archivos, si tu versión de Git los soporta
¿Cómo deshago el último commit pero mantengo mis cambios?
git reset --soft HEAD~1--softmantiene los cambios preparados--mixed(predeterminado) mantiene los cambios pero los deshace del staging--harddescarta los cambios completamente (peligroso)
¿Qué son los prefijos de commit convencionales y por qué usarlos?
- Prefijos como
feat:,fix:,refactor:,docs:,chore:,test:categorizan cambios - Permiten la generación automática de changelogs y versionamiento semántico
- Los equipos pueden escanear rápidamente el historial para entender qué hace cada commit
¿Cómo veo qué cambió en un commit específico?
git show abc1234- Muestra el mensaje de commit, autor, fecha y el diff completo
- Agrega
--statpara un resumen de archivos modificados en lugar del diff completo
¿Qué pasa si accidentalmente commiteo secretos como .env?
- El secreto ahora está en el historial de Git incluso si eliminas el archivo en un nuevo commit
- Rota inmediatamente las credenciales expuestas
- Usa
git filter-branchogit filter-repopara eliminar el archivo del historial - Agrega
.enva.gitignorepara prevenir accidentes futuros
Trampa mortal: ¿Por qué a veces git add -p omite completamente archivos nuevos?
git add -psolo funciona con archivos rastreados (archivos ya conocidos por Git)- Los archivos nuevos sin seguimiento primero deben prepararse con
git add file.tsx, luego puedes usar-pen cambios posteriores
¿Cómo elimino una rama local que ha sido fusionada?
git branch -d feature/my-branch-dsolo elimina si la rama ha sido fusionada-Delimina a la fuerza incluso ramas no fusionadas (úsalo con cuidado)
¿Qué significa HEAD separado y cómo lo arreglo?
- HEAD separado significa que hiciste checkout a un hash de commit en lugar de a un nombre de rama
- Cualquier nuevo commit que hagas no estará en ninguna rama y puede perderse
- Solución:
git checkout -b my-new-branchpara crear una rama en el commit actual
¿Cómo busco en los mensajes de commit por una palabra clave?
git log --grep="auth" --oneline--grepfiltra por contenido de mensaje de commit- Agrega
--allpara buscar en todas las ramas
¿En un proyecto TypeScript, debo hacer commit de tsconfig.tsbuildinfo?
- No. Es un archivo de caché de construcción generado por la compilación incremental de TypeScript
- Agrega
*.tsbuildinfoa tu.gitignore
¿Cómo puedo verificar tipos de archivos TypeScript preparados antes de hacer commit?
npx tsc --noEmit- Combina esto con un hook pre-commit (p. ej., Husky + lint-staged) para automatizarlo
--noEmitverifica tipos sin producir archivos de salida
Relacionado
- Merging & Rebasing — Combinando ramas y manteniendo el historial limpio
- GitHub CLI — Crea PRs y gestiona problemas desde la terminal
- Git Utilities — Stash, bisect, cherry-pick y otras herramientas poderosas