Git es la herramienta más importante del desarrollo de software moderno. Sin importar si programas en PHP, Python o Java — si no sabes Git, no eres profesional. Esta guía te lleva de cero a flujo de trabajo real en equipo.
¿Qué es Git y por qué importa?
Git es un sistema de control de versiones distribuido. Guarda un historial completo de todos los cambios en tu código, te permite volver a cualquier punto en el tiempo, trabajar en paralelo con un equipo y fusionar cambios sin perder trabajo. GitHub es una plataforma web que aloja repositorios Git — no son lo mismo.
Configuración inicial (una sola vez)
# Instalar Git
# Linux: sudo apt install git
# macOS: brew install git
# Windows: git-scm.com
# Configurar tu identidad
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
git config --global init.defaultBranch main
# Ver configuración
git config --list
Los tres estados de Git
Cada archivo en un repositorio puede estar en uno de tres estados:
- Working Directory: tus archivos actuales con cambios sin guardar
- Staging Area (Index): cambios preparados para el próximo commit
- Repository: historial permanente de commits
# Iniciar un repositorio nuevo
git init mi-proyecto
cd mi-proyecto
# O clonar uno existente
git clone https://github.com/usuario/repo.git
# Ver el estado actual
git status
# Agregar archivos al staging area
git add archivo.php # un archivo específico
git add . # todos los cambios
git add *.php # todos los PHP
# Hacer un commit (guardar en el historial)
git commit -m "Agregar página de inicio con navbar"
# Ver el historial
git log --oneline --graph
Flujo de trabajo con ramas (branches)
# Ver ramas disponibles
git branch
# Crear y cambiar a una rama nueva
git checkout -b feature/login-cms
# o con la sintaxis moderna:
git switch -c feature/login-cms
# Trabajar en la rama...
# (editar archivos, git add, git commit)
# Ver diferencias entre ramas
git diff main feature/login-cms
# Fusionar la rama con main cuando está lista
git checkout main
git merge feature/login-cms
# Eliminar la rama después de fusionar
git branch -d feature/login-cms
Trabajar con GitHub (remoto)
# Conectar repositorio local con GitHub
git remote add origin https://github.com/usuario/mi-proyecto.git
# Subir código al repositorio remoto
git push -u origin main # primera vez (-u configura el upstream)
git push # las siguientes veces
# Descargar cambios del repositorio remoto
git pull
# Descargar sin fusionar automáticamente
git fetch origin
Resolver conflictos
# Cuando dos personas editan el mismo archivo, Git marca el conflicto:
<<<<<<< HEAD
# Tu versión local
$color_primario = "#06357a";
=======
# Versión del compañero
$color_primario = "#0055a5";
>>>>>>> feature/nueva-paleta
# Editar el archivo manualmente, elegir una versión o combinarlas
# Luego:
git add archivo-conflictivo.php
git commit -m "Resolver conflicto en colores"
Comandos que salvan vidas
# Deshacer cambios en un archivo antes de hacer commit
git checkout -- archivo.php
# o moderno:
git restore archivo.php
# Sacar un archivo del staging (sin perder los cambios)
git restore --staged archivo.php
# Ver qué cambió exactamente
git diff # cambios sin stagear
git diff --staged # cambios en staging vs último commit
# Guardar cambios temporalmente (sin commitear)
git stash
git stash pop # recuperarlos después
# Ver quién modificó cada línea de un archivo
git blame archivo.php
✅ Buenos commits: un commit = un cambio lógico · mensaje en imperativo presente ("Agregar validación", no "Agregué validación") · nunca commitear credenciales (.env en .gitignore siempre) · commits pequeños y frecuentes, no un commit enorme al final del día
"Git no es perfectamente intuitivo al principio — pero es la herramienta que más tiempo te ahorará en toda tu carrera como desarrollador."