Git y Control de Versiones: Comandos Básicos y Flujos de Trabajo
Git es la herramienta fundamental del desarrollo de software moderno. Esta guía cubre los comandos básicos de Git, estrategias de branching y flujos de trabajo.
Actualizado:¿Qué es Git y por qué usarlo?
Git es un sistema de control de versiones distribuido. Rastrea cambios de código, gestiona diferentes versiones y facilita la colaboración en equipo.
Estructura distribuida: Cada desarrollador tiene una copia completa del repositorio. Esto permite trabajo offline y operaciones rápidas.
Branching: Cree ramas separadas para diferentes características o correcciones. Esto mantiene el código principal (main/master) siempre estable.
Merge y rebase: Fusione ramas en la rama principal. Merge preserva el historial de commits. Rebase crea un historial lineal.
Comandos Básicos de Git
git init: Crea un nuevo repositorio. git clone <url>: Copia un repositorio existente.
git add <file>: Agrega cambios al área de staging. git add .: Agrega todos los cambios.
git commit -m "mensaje": Confirma los cambios en staging. Escriba mensajes de commit significativos.
git status: Verifica el estado del repositorio. git log: Visualiza el historial de commits.
git diff: Ve las diferencias entre el directorio de trabajo y el área de staging. git diff --staged: Ve las diferencias entre el área de staging y el último commit.
Branching y Merging
git branch <name>: Crea una nueva rama. git checkout <name> o git switch <name>: Cambia a la rama.
git merge <branch>: Fusiona la rama en la rama actual. Usa fast-forward merge o three-way merge.
Conflicto de merge: Se requiere resolución manual para cambios conflictivos. Edite los archivos conflictivos, márquelos con git add, complete con git commit.
git branch -d <name>: Elimina la rama. git branch -D <name>: Fuerza la eliminación de una rama no fusionada.
Operaciones de Repositorio Remoto
git remote add origin <url>: Agrega repositorio remoto. git remote -v: Lista los remotos.
git push origin <branch>: Envía cambios locales al remoto. git push -u origin main: Establece la rama upstream.
git pull: Obtiene y fusiona cambios remotos. git fetch: Obtiene cambios remotos (sin fusionar).
git push --force: Actualiza forzadamente la rama remota (usar con cuidado). git push --force-with-lease: Force push más seguro.
Estrategias de Branching
Git Flow: main (producción), develop (desarrollo), feature/* (nuevas características), release/* (preparación de versión), hotfix/* (correcciones urgentes).
GitHub Flow: rama main + ramas de características. Cada rama de característica se fusiona a main mediante pull request. Simple y efectivo.
Trunk-Based Development: Una sola rama main, ramas de características de corta duración (1-2 días). Combinado con integración continua (CI/CD).
Criterios de selección: Git Flow para proyectos grandes, GitHub Flow para proyectos pequeños-medianos, Trunk-Based Development para equipos con CI/CD maduro.
Mejores Prácticas
Mensajes de commit: Use modo imperativo ('Add feature' no 'Added feature'). Limite la primera línea a 50 caracteres, los detalles a 72 caracteres.
Commits atómicos: Cada commit debe contener un solo cambio. Divida los cambios grandes en commits pequeños.
Nomenclatura de ramas: Use nombres descriptivos como feature/user-authentication, bugfix/login-error, hotfix/security-patch.
.gitignore: Ignore archivos innecesarios (node_modules, .env, build/). Use las plantillas de gitignore de GitHub.
Pull request: Use pull requests para revisión de código. Cada cambio debe ser revisado por al menos una persona.