¿Qué es Git?
Git es un sistema de control de versiones distribuido. En palabras simples: es una herramienta que guarda el historial completo de cambios de tu código, como un "deshacer" inteligente que recuerda cada modificación que hiciste, cuándo la hiciste y por qué.
Imagina que estás escribiendo un documento importante. Git sería como guardar una copia del documento cada vez que realizas un cambio relevante, pero de forma automática y organizada, sin llenar tu disco con archivos llamados documento_final_v2_DEFINITIVO.docx.
¿Por qué se utiliza en el desarrollo de software?
En el desarrollo de software, el código cambia constantemente. Sin una herramienta como Git:
- Es difícil saber quién cambió qué y cuándo.
- Trabajar en equipo se convierte en un caos de archivos sobrescritos.
- Volver a una versión anterior del código puede ser imposible.
Git resuelve todos estos problemas al mantener un registro preciso de cada modificación y permitir que múltiples personas trabajen sobre el mismo proyecto sin pisarse los pies.
Beneficios principales
- Historial completo: puedes ver cada cambio realizado en el proyecto.
- Colaboración: varios desarrolladores pueden trabajar en paralelo sin conflictos.
- Reversibilidad: si algo se rompe, puedes volver a una versión anterior en segundos.
- Ramas: permite experimentar con nuevas funcionalidades sin afectar el código principal.
- Amplia adopción: es el estándar de la industria, usado en startups y grandes empresas.
Herramientas populares para trabajar con Git
Git CLI
La línea de comandos de Git (Git CLI) es la herramienta oficial. Con ella puedes ejecutar cualquier comando de Git directamente desde la terminal. Es la forma más completa y flexible de usar Git, y aprender a usarla te dará una comprensión sólida de cómo funciona por dentro.
GitHub
GitHub es la plataforma de alojamiento de repositorios más popular del mundo. Permite almacenar tu código en la nube, colaborar con otros desarrolladores y gestionar proyectos mediante pull requests, issues y wikis.
GitLab
GitLab es una alternativa a GitHub con funcionalidades integradas de CI/CD (integración y despliegue continuo). Es muy popular en entornos empresariales y permite instalación propia (self-hosted).
Bitbucket
Bitbucket es la plataforma de Atlassian (creadores de Jira). Ofrece integración nativa con herramientas como Jira y Confluence, y es una opción común en equipos que ya usan el ecosistema de Atlassian.
Clientes gráficos populares
Si prefieres una interfaz visual en lugar de la terminal, estas herramientas ofrecen una experiencia amigable:
- GitHub Desktop: simple e ideal para principiantes.
- Sourcetree: potente y gratuito, desarrollado por Atlassian.
- GitKraken: moderno, con una interfaz visual muy clara.
- VS Code: incluye integración con Git directamente en el editor.
Comandos más utilizados
git init
Descripción: Inicializa un nuevo repositorio Git en el directorio actual.
# Sintaxis
git init
# Ejemplo
mkdir mi-proyecto
cd mi-proyecto
git init
# Resultado: Initialized empty Git repository in mi-proyecto/.git/
git clone
Descripción: Descarga una copia completa de un repositorio remoto a tu máquina local.
# Sintaxis
git clone <url-del-repositorio>
# Ejemplo
git clone https://github.com/usuario/mi-proyecto.git
git status
Descripción: Muestra el estado actual del repositorio: qué archivos fueron modificados, cuáles están listos para el próximo commit y cuáles no están siendo rastreados.
# Sintaxis
git status
# Ejemplo
git status
# On branch main
# Changes not staged for commit:
# modified: index.html
git add
Descripción: Prepara archivos modificados para incluirlos en el próximo commit.
# Sintaxis
git add <archivo> # un archivo específico
git add . # todos los archivos modificados
# Ejemplo
git add index.html
git add .
git commit
Descripción: Guarda los cambios preparados en el historial del repositorio con un mensaje descriptivo.
# Sintaxis
git commit -m "mensaje del commit"
# Ejemplo
git commit -m "Agrega página de inicio con formulario de contacto"
git pull
Descripción: Descarga los cambios del repositorio remoto y los fusiona con tu rama local. Es el comando que usas para "actualizarte" con el trabajo de tus compañeros.
# Sintaxis
git pull
# Ejemplo
git pull origin main
git push
Descripción: Envía tus commits locales al repositorio remoto.
# Sintaxis
git push <remoto> <rama>
# Ejemplo
git push origin main
git fetch
Descripción: Descarga los cambios del repositorio remoto sin fusionarlos automáticamente. A diferencia de git pull, te deja revisar los cambios antes de integrarlos.
# Sintaxis
git fetch
# Ejemplo
git fetch origin
git log origin/main # revisa qué llegó antes de fusionar
git log
Descripción: Muestra el historial de commits del repositorio.
# Sintaxis
git log
git log --oneline # versión compacta
# Ejemplo
git log --oneline
# a3f1b2c Agrega autenticación de usuario
# 9e0d4a1 Corrige error en formulario de contacto
git branch
Descripción: Lista, crea o elimina ramas en el repositorio.
# Sintaxis
git branch # lista las ramas
git branch <nombre-rama> # crea una nueva rama
# Ejemplo
git branch
# * main
# feature/login
git branch feature/registro
git checkout o git switch
Descripción: Cambia entre ramas o restaura archivos. git switch es la alternativa moderna y más clara para cambiar de rama.
# Sintaxis (clásico)
git checkout <rama>
# Sintaxis (moderno)
git switch <rama>
# Ejemplo
git switch feature/login
# Switched to branch 'feature/login'
¿Qué son las ramas (Branches)?
Una rama es una línea de desarrollo independiente dentro del mismo repositorio. Piensa en el código principal como el tronco de un árbol: cada rama te permite trabajar en algo nuevo (una funcionalidad, una corrección) sin tocar el tronco hasta que estés listo.
Importancia de las ramas
- Permiten desarrollar funcionalidades de forma aislada.
- Protegen el código principal (generalmente
mainomaster) de cambios incompletos o con errores. - Facilitan la revisión de código antes de integrarlo al proyecto.
Relación con el trabajo en equipo
En un equipo, cada desarrollador trabaja en su propia rama. Cuando la funcionalidad está lista, se abre un Pull Request (en GitHub) o Merge Request (en GitLab) para que otros revisen el código antes de fusionarlo. Este flujo de trabajo evita conflictos y mejora la calidad del código.
Uso de ramas
Crear una rama
git branch feature/nueva-funcionalidad
# o directamente crea y cambia a ella:
git switch -c feature/nueva-funcionalidad
Cambiar de rama
git switch main
git switch feature/nueva-funcionalidad
Fusionar ramas (merge)
Una vez que tu funcionalidad está lista, fusiona tu rama con main:
git switch main
git merge feature/nueva-funcionalidad
Eliminar ramas
# Eliminar rama local (ya fusionada)
git branch -d feature/nueva-funcionalidad
# Eliminar rama remota
git push origin --delete feature/nueva-funcionalidad
Buenas prácticas para nombrar ramas
Usa nombres descriptivos y consistentes. Algunas convenciones comunes:
feature/nombre-funcionalidad— para nuevas funcionalidades.fix/descripcion-del-error— para correcciones de errores.hotfix/error-critico— para correcciones urgentes en producción.chore/tarea-de-mantenimiento— para tareas como actualizar dependencias.
Evita nombres genéricos como mi-rama, prueba o cambios.
Conclusión
Git es una habilidad fundamental para cualquier desarrollador de software. Con los conceptos y comandos de esta guía ya puedes:
- Crear y clonar repositorios.
- Registrar cambios con commits descriptivos.
- Sincronizarte con un equipo usando
pullypush. - Organizar tu trabajo con ramas.
Recomendaciones para seguir aprendiendo
- Practica creando repositorios propios en GitHub.
- Aprende sobre pull requests y revisión de código.
- Explora flujos de trabajo como Git Flow o GitHub Flow.
- Lee la documentación oficial: git-scm.com.
- Usa
git help <comando>en la terminal para consultar cualquier comando.
Resumen rápido
| Comando | ¿Qué hace? |
|---|---|
git init |
Inicializa un repositorio nuevo |
git clone <url> |
Clona un repositorio remoto |
git status |
Muestra el estado del repositorio |
git add . |
Prepara todos los cambios para commit |
git commit -m "msg" |
Guarda los cambios con un mensaje |
git pull |
Descarga y fusiona cambios del remoto |
git push |
Envía commits al repositorio remoto |
git fetch |
Descarga cambios sin fusionarlos |
git log --oneline |
Muestra el historial de commits |
git branch |
Lista las ramas del repositorio |
git switch <rama> |
Cambia a otra rama |
git merge <rama> |
Fusiona una rama con la actual |
git branch -d <rama> |
Elimina una rama local |
¡Ahora estás listo/a para empezar a usar Git en tus proyectos!