Configuración de Git
Configura Git para un flujo de trabajo productivo — identidad, aliases, valores predeterminados y patrones .gitignore para proyectos Next.js.
Receta
Tarjeta de referencia rápida — lista para copiar y pegar.
# Establecer identidad
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# Establecer nombre de rama predeterminado
git config --global init.defaultBranch main
# Usar rebase en pull por defecto
git config pull.rebase true
# Habilitar rerere (reutilizar resolución grabada)
git config --global rerere.enabled true
# Establecer VS Code como editor
git config --global core.editor "code --wait"
# Ver toda la configuración
git config --list --show-originCuándo usarlo: Cuando configures una máquina nueva, te incorpores a un proyecto o optimices operaciones repetitivas de Git.
Ejemplo Práctico
.gitignore recomendado para Next.js
# Dependencias
node_modules/
.pnp/
.pnp.js
# Salida de compilación
.next/
out/
build/
dist/
# Archivos de entorno
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# IDE
.vscode/settings.json
.idea/
*.swp
*.swo
.DS_Store
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# TypeScript
*.tsbuildinfo
next-env.d.ts
# Vercel
.vercel
# Testing
coverage/
playwright-report/
test-results/
# Misc
*.pem
.turboLo que esto demuestra:
- Secciones separadas para dependencias, salida de compilación, secretos, archivos de IDE y herramientas
- Los archivos
.envsiempre se ignoran — los secretos nunca deben comprometerse next-env.d.tsse genera automáticamente y debe ignorarse
Análisis Profundo
Aliases útiles de Git
# Estado corto
git config --global alias.s "status -sb"
# Log bonito
git config --global alias.lg "log --oneline --graph --all --decorate"
# Deshacer último commit (mantener cambios staged)
git config --global alias.undo "reset --soft HEAD~1"
# Mostrar lo que hiciste hoy
git config --global alias.today "log --since='midnight' --oneline --author='Your Name'"
# Listar aliases
git config --global alias.aliases "config --get-regexp ^alias"
# Enmendar sin editar mensaje
git config --global alias.amend "commit --amend --no-edit"
# Diff rápido de cambios staged
git config --global alias.staged "diff --cached"Uso después de la configuración:
git s # estado corto
git lg # gráfico de log bonito
git undo # deshacer último commit
git today # commits de hoy
git amend # enmendar último commit silenciosamente
git staged # diff de cambios stagedConfig Global vs Local
# Global (aplica a todos los repos) — almacenado en ~/.gitconfig
git config --global user.name "Your Name"
# Local (aplica solo a este repo) — almacenado en .git/config
git config user.email "work@company.com"
# Sistema (aplica a todos los usuarios) — raramente usado
git config --system core.autocrlf true
# Verificar de dónde viene un valor de configuración
git config --show-origin user.emailValores predeterminados globales útiles
# Autocorrección de typos (se ejecuta después de 1 segundo)
git config --global help.autocorrect 10
# Colorizar salida
git config --global color.ui auto
# Establecer estrategia de merge predeterminada
git config --global merge.conflictstyle diff3
# Firmar commits con GPG
git config --global commit.gpgsign true
git config --global user.signingkey YOUR_GPG_KEY_ID
# Cachear credenciales por 1 hora
git config --global credential.helper 'cache --timeout=3600'
# Llavero de macOS
git config --global credential.helper osxkeychainConfiguración de claves SSH para GitHub
# Generar una nueva clave SSH
ssh-keygen -t ed25519 -C "you@example.com"
# Iniciar el agente SSH
eval "$(ssh-agent -s)"
# Agregar clave al agente
ssh-add ~/.ssh/id_ed25519
# Copiar clave pública al portapapeles (macOS)
pbcopy < ~/.ssh/id_ed25519.pub
# Luego agregar a GitHub: Settings > SSH and GPG keys > New SSH key
# Probar la conexión
ssh -T git@github.com
# "Hi username! You've successfully authenticated"Hooks
Los hooks de Git ejecutan scripts automáticamente en puntos clave del flujo de trabajo de Git.
# Hooks comunes (en .git/hooks/ o gestionados por Husky)
pre-commit # Se ejecuta antes de cada commit — lint, formato, verificación de tipos
commit-msg # Validar formato del mensaje de commit
pre-push # Se ejecuta antes del push — ejecutar pruebas
post-merge # Se ejecuta después de merge — reinstalar dependenciasCon Husky (recomendado para proyectos de equipo):
npx husky init
# Agregar un hook pre-commit
echo "npx lint-staged" > .husky/pre-commitGotchas
Cosas que te atrapará. Cada gotcha incluye qué sale mal, por qué sucede y la solución.
-
Email incorrecto en commits — Usar un email personal en un repo de trabajo (o viceversa). Solución: Establecer configuración local por repo:
git config user.email "work@company.com". -
.gitignoreno funciona en archivos rastreados — Agregar un archivo a.gitignoredespués de que ya se ha comprometido no detiene su rastreo. Solución:git rm --cached .envpara destraquear, luego commit. -
Problemas de terminaciones de línea (CRLF/LF) — Windows y macOS/Linux usan diferentes terminaciones de línea, causando diffs ruidosos. Solución: Agregar un archivo
.gitattributes:* text=autoy*.tsx text eol=lf. -
Hooks no se ejecutan — Los hooks de Git necesitan permisos de ejecución. Solución:
chmod +x .husky/pre-commit. Con Husky v9+, asegúrate de que el directorio.husky/esté configurado correctamente.
Alternativas
Otras formas de resolver el mismo problema — y cuándo es mejor cada una.
| Alternativa | Úsalo cuando | No lo uses cuando |
|---|---|---|
.gitattributes | Aplicar terminaciones de línea y comportamiento de diff por tipo de archivo | Proyectos simples en una sola plataforma |
| Husky + lint-staged | Proyectos de equipo que necesitan verificaciones pre-commit consistentes | Proyectos individuales en los que confías en tu propia disciplina |
direnv | Configuración de entorno por directorio más allá de Git | Necesidades de configuración solo de Git |
FAQs
¿Cuál es la diferencia entre config de Git --global, local y --system?
--globalaplica a todos los repos del usuario actual (~/.gitconfig)- Local (sin flag) aplica solo al repo actual (.git/config)
--systemaplica a todos los usuarios en la máquina (raramente usado)- La configuración local anula la global, que anula la del sistema
¿Cómo verifico de dónde viene un valor de configuración específica?
git config --show-origin user.email- Muestra la ruta del archivo y el valor, para que sepas si es global o local
¿Por qué .gitignore no está ignorando un archivo que acabo de agregarle?
.gitignoresolo previene que archivos sin rastrear se staged- Si un archivo ya está rastreado (comprometido), debes destraquear primero:
git rm --cached .env
git commit -m "chore: untrack .env"¿Cómo configuro aliases de Git para comandos comunes?
git config --global alias.s "status -sb"
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.undo "reset --soft HEAD~1"- Luego usa
git s,git lg,git undocomo atajos
¿Qué hace pull.rebase true y debería habilitarlo?
- Hace que
git pullautomáticamente rebase en lugar de merge - Esto evita commits de merge ruidosos al tirar actualizaciones en una rama de feature
- Recomendado para la mayoría de flujos de trabajo; establecer con
git config --global pull.rebase true
Gotcha: Estoy usando el email incorrecto en commits en un repo de trabajo. ¿Cómo lo arreglo?
git config user.email "work@company.com"- Esto establece el email solo para el repo actual (sin
--global) - Los commits ya enviados con el email incorrecto no pueden cambiarse sin reescribir el historial
¿Cómo configuro claves SSH para GitHub?
- Generar una clave:
ssh-keygen -t ed25519 -C "you@example.com" - Agregar al agente:
ssh-add ~/.ssh/id_ed25519 - Copiar la clave pública y agregarla a GitHub en Settings > SSH and GPG keys
- Probar con:
ssh -T git@github.com
¿Qué es rerere y cuándo debería habilitarlo?
rereresignifica "reuse recorded resolution"- Recuerda cómo resolviste un conflicto y lo aplica automáticamente la próxima vez
- Habilitarlo con
git config --global rerere.enabled true - Especialmente útil al hacer rebase frecuentemente
¿Cómo configuro un hook pre-commit para ejecutar lint y verificaciones de tipos?
npx husky init
echo "npx lint-staged" > .husky/pre-commit- Emparejar con una configuración
lint-stagedenpackage.jsonpara ejecutar verificaciones solo en archivos staged
Gotcha: Mis hooks de Git no se están ejecutando. ¿Qué debo verificar?
- Asegúrate de que el archivo del hook tenga permisos de ejecución:
chmod +x .husky/pre-commit - Con Husky v9+, confirma que el directorio
.husky/esté debidamente inicializado - Verifica que el script
prepareexista enpackage.json:"prepare": "husky"
En un proyecto de TypeScript, ¿qué archivos deben ir en .gitignore?
node_modules/,.next/,out/,dist/,build/(dependencias y salida de compilación).env,.env.local,.env.*.local(secretos)*.tsbuildinfo,next-env.d.ts(archivos TypeScript auto-generados)coverage/,playwright-report/(salida de pruebas)
¿Cómo manejo problemas de terminaciones de línea CRLF vs LF entre plataformas?
- Agregar un archivo
.gitattributesen la raíz del repo:
* text=auto
*.tsx text eol=lf
*.ts text eol=lf
- Esto normaliza las terminaciones de línea en el commit independientemente del SO del desarrollador
Relacionado
- Comandos esenciales de Git — Operaciones básicas de Git para uso diario
- Utilidades de Git — Stash, bisect, cherry-pick y otras herramientas avanzadas
- GitHub CLI — Gestionar PRs, problemas y lanzamientos desde la terminal
- Linting y formateo — Configurar Husky y lint-staged