¿Qué es Git?
Un sistema de control de versiones distribuido, gratuito y de código abierto, diseñado para manejar proyectos con velocidad y eficiencia.
¿Por qué usar Git?
Los tres estados de Git
Todo archivo en Git vive en uno de estos tres estados:
git add
git commit
Git vs GitHub
Instalación & Configuración
Instalar Git
brew install gitsudo apt install gitgit --version # Salida esperada: git version 2.x.x
Configuración inicial
Lo primero que debes hacer al instalar Git es configurar tu nombre y email. Estos datos se incluyen en cada commit.
# Nombre de usuario git config --global user.name "Tu Nombre" # Email git config --global user.email "[email protected]" # Editor por defecto (VS Code) git config --global core.editor "code --wait" # Rama principal por defecto git config --global init.defaultBranch main # Ver toda la configuración git config --list
Niveles de configuración
| Nivel | Flag | Archivo | Alcance |
|---|---|---|---|
| System | --system | /etc/gitconfig | Todos los usuarios del sistema |
| Global | --global | ~/.gitconfig | Tu usuario en el sistema |
| Local | --local | .git/config | Solo el repositorio actual |
Primeros Pasos
Crear un repositorio
-
1Crea una carpeta y entra en ella
Será el directorio raíz de tu proyecto.
-
2Inicializa Git con
git initCrea la carpeta oculta
.git/con todos los metadatos del repositorio. -
3¡Listo para versionar!
Ya puedes empezar a trackear archivos con
git add.
# Crear carpeta del proyecto mkdir mi-proyecto cd mi-proyecto # Inicializar Git git init # → Initialized empty Git repository in .../mi-proyecto/.git/ # Clonar un repositorio existente git clone https://github.com/usuario/repo.git git clone https://github.com/usuario/repo.git mi-carpeta
El archivo .gitignore
Le indica a Git qué archivos o carpetas no debe trackear.
# Dependencias node_modules/ .env # Build dist/ *.log # OS .DS_Store Thumbs.db
Ciclo de trabajo básico
El ciclo de vida de un cambio en Git sigue siempre el mismo patrón: modificar → preparar → confirmar.
archivos
git addArea
git commitRepo
git pushRepo
git status — Estado del repositorio
git status # Estado completo git status -s # Formato corto
git add — Preparar cambios
git add archivo.txt # Archivo específico git add src/ # Toda una carpeta git add . # Todos los cambios git add -p # Modo interactivo (selecciona hunks) git add *.js # Por patrón glob
git commit — Confirmar cambios
git commit -m "feat: añadir login de usuario" git commit -am "fix: corregir bug en navbar" # add + commit git commit # Abre editor git commit --amend # Modifica último commit
Buenas prácticas para mensajes de commit
# Formato: tipo(alcance): descripción corta feat(auth): añadir autenticación con Google fix(ui): corregir overflow en móviles docs: actualizar README con instrucciones de build refactor(api): simplificar lógica de paginación test: añadir tests para módulo de pagos chore: actualizar dependencias a última versión
- Primera línea: máximo 72 caracteres
- Usa el imperativo presente: "añadir", no "añadí" ni "añadiendo"
- Cada commit debe ser una unidad lógica de cambio
Ramas (Branches)
Las ramas permiten desarrollar features, arreglar bugs y experimentar de forma aislada sin afectar el código estable.
Gestión de ramas
# Listar ramas git branch # Locales git branch -a # Locales + remotas # Crear rama git branch feature/login # Cambiar de rama git switch feature/login git checkout feature/login # Forma clásica # Crear y cambiar en un paso git switch -c feature/login git checkout -b feature/login # Eliminar rama git branch -d feature/login # Seguro git branch -D feature/login # Forzado # Renombrar rama actual git branch -m nuevo-nombre
Merge — Fusionar ramas
# 1. Posicionarse en la rama destino git switch main # 2. Fusionar la rama feature git merge feature/login # Merge sin fast-forward (crea commit de merge) git merge --no-ff feature/login # Abortar un merge conflictivo git merge --abort
Rebase — Reescribir historia
# Rebasar feature sobre main git switch feature/login git rebase main # Rebase interactivo (últimos 3 commits) git rebase -i HEAD~3 # Continuar/abortar rebase git rebase --continue git rebase --abort
Resolver conflictos
-
1Git marca los conflictos en el archivo
Verás marcadores
<<<<<<<,=======,>>>>>>> -
2Edita el archivo y elige qué versión mantener
Elimina los marcadores y deja el código que deseas.
-
3Confirma la resolución
git add archivo.txt→git commit
Repositorios Remotos
Conectar con el remoto
# Listar remotos git remote -v # Añadir remoto git remote add origin https://github.com/user/repo.git # Cambiar URL del remoto git remote set-url origin https://github.com/user/nuevo-repo.git # Eliminar remoto git remote remove origin
Push, Pull y Fetch
# Subir cambios al remoto git push origin main git push # Si ya está trackeada git push -u origin feature/login # Primera vez + track git push --force-with-lease # Push forzado seguro # Descargar y fusionar cambios git pull # fetch + merge git pull --rebase # fetch + rebase # Solo descargar (sin fusionar) git fetch git fetch origin
Flujo completo con GitHub
- 1Fork o clone del repo
git clone https://github.com/org/proyecto.git - 2Crea una rama para tu feature
git switch -c feature/mi-cambio - 3Haz tus commits
git add . && git commit -m "feat: mi cambio" - 4Sube la rama
git push -u origin feature/mi-cambio - 5Abre un Pull Request en GitHub
Describe los cambios, asigna revisores y espera la aprobación.
fetch descarga los cambios remotos pero no los aplica — puedes revisarlos antes de mergear. pull hace fetch + merge automáticamente. Prefiere fetch en entornos compartidos para tener control total.Historial & Diff
git log — Ver el historial
git log # Historial completo git log --oneline # Una línea por commit git log --oneline --graph # Con árbol visual git log -n 10 # Últimos 10 commits git log --author="Ana" # Por autor git log --since="2024-01-01" # Por fecha git log --grep="fix" # Por mensaje git log --follow src/app.js # Historial de archivo # Formato personalizado git log --pretty=format:"%h %an %s"
git diff — Ver diferencias
git diff # Working dir vs staging git diff --staged # Staging vs último commit git diff HEAD~1 # Penúltimo vs actual git diff main feature/login # Entre ramas git diff abc123 def456 # Entre commits
git show y git blame
# Ver detalles de un commit específico git show abc123 git show HEAD # Ver quién escribió cada línea git blame src/index.js git blame -L 10,25 src/index.js # Líneas 10 a 25
Deshacer cambios
Mapa de situaciones
| Situación | Comando | Seguridad |
|---|---|---|
| Descartar cambios en working dir | git restore archivo.txt | Seguro |
| Sacar archivo del staging | git restore --staged archivo.txt | Seguro |
| Revertir un commit (crea nuevo) | git revert abc123 | Seguro |
| Deshacer commits (mantener cambios) | git reset --soft HEAD~1 | Local |
| Deshacer commits y staging | git reset --mixed HEAD~1 | Local |
| Deshacer TODO (sin recuperar) | git reset --hard HEAD~1 | Peligroso |
# Restaurar archivo al último commit git restore archivo.txt # Quitar del staging (mantiene cambios) git restore --staged archivo.txt # Revertir commit (forma segura para historial público) git revert abc123 # Mover HEAD N commits atrás (mantiene cambios staged) git reset --soft HEAD~2 # Recuperar commit eliminado (con reflog) git reflog git cherry-pick abc123
git reflog seguido de git cherry-pick o git reset.Stash & Tags
git stash — Guardar trabajo temporal
Útil cuando necesitas cambiar de rama sin hacer commit de cambios incompletos.
# Guardar cambios git stash git stash push -m "wip: formulario de contacto" git stash push -u # Incluye archivos no tracked # Listar stashes git stash list # Aplicar stash git stash pop # Aplica y elimina del stash git stash apply stash@{1} # Aplica uno específico # Eliminar stash git stash drop stash@{0} git stash clear # Elimina todos
git tag — Marcar versiones
# Listar tags git tag git tag -l "v1.*" # Por patrón # Crear tag git tag v1.0.0 # Ligero git tag -a v1.0.0 -m "Primera release" # Anotado # Subir tags al remoto git push origin v1.0.0 # Un tag git push origin --tags # Todos los tags # Eliminar tag git tag -d v1.0.0 git push origin --delete v1.0.0
Cheat Sheet
Referencia rápida de todos los comandos. Haz clic en cualquier fila para copiar el comando.
Quiz Interactivo
Pon a prueba tus conocimientos de Git. Respuestas correctas: 0 / 0