Introducción a Git
Una herramienta esencial para el desarrollo de software
1. Introducción a Git
¿Qué es Git?
Git es un sistema de control de versiones distribuido diseñado para:
- Rastrear cambios en archivos
- Coordinar el trabajo entre múltiples personas
- Mantener un historial completo del proyecto
- Permitir volver a estados anteriores
Historia breve
- Creado por Linus Torvalds en 2005 para el desarrollo del kernel de Linux
- Surgió como alternativa a herramientas propietarias y centralizadas
- Hoy es el estándar de la industria para control de versiones
Diferencias con otros sistemas
Sistemas centralizados (SVN, CVS):
- Dependen de un servidor central
- Requieren conexión constante
- Operaciones más lentas
Git (distribuido):
- Cada desarrollador tiene una copia completa del repositorio
- Permite trabajo sin conexión
- Mayor velocidad y flexibilidad
2. Conceptos básicos de Git
Repositorios
- Repositorio: Colección de archivos y su historial de cambios
- Local: En tu máquina personal
- Remoto: Alojado en un servidor (GitHub, GitLab, etc.)
Ciclo de trabajo básico
- Modificar archivos en tu directorio de trabajo
- Seleccionar archivos para la próxima versión (staging)
- Confirmar los cambios (commit)
- Sincronizar con repositorios remotos (push/pull)
Áreas de trabajo en Git
- Working directory: Donde modificas tus archivos
- Staging area (index): Preparación para el próximo commit
- Local repository: Historial de commits en tu máquina
- Remote repository: Versión compartida en el servidor

3. Configuración y comandos esenciales
Configuración inicial
# Configuración global
git config --global user.name "Tu Nombre"
git config --global user.email "tu.email@ejemplo.com"
# Configuración del repositorio actual
git config user.name "Tu Nombre"
git config user.email "tu.email@ejemplo.com"
Iniciar un repositorio
# Crear un nuevo repositorio
git init
# Clonar un repositorio existente
git clone https://github.com/usuario/repositorio.git
Comandos básicos
# Ver estado de archivos
git status
# Añadir archivos al staging area
git add archivo.txt # Archivo específico
git add . # Todos los archivos
# Confirmar cambios
git commit -m "Mensaje descriptivo del cambio"
git commit -a -m "Añadir y confirmar en un paso"
# Ver historial de commits
git log
git log --oneline # Formato resumido
git log --graph # Con representación gráfica
4. Trabajo con ramas (branches)
Concepto de ramificación
- Las ramas permiten desarrollar funcionalidades aisladas
- Facilitan el trabajo en paralelo
- Permiten experimentar sin afectar el código principal
Comandos para ramas
# Ver ramas existentes
git branch
# Crear nueva rama
git branch nueva-funcionalidad
# Cambiar a una rama
git checkout nueva-funcionalidad
git switch nueva-funcionalidad # Git moderno
# Crear y cambiar en un paso
git checkout -b nueva-funcionalidad
# Fusionar ramas
git checkout main
git merge nueva-funcionalidad
# Eliminar rama
git branch -d nueva-funcionalidad
Resolución de conflictos
- Git marca los conflictos en los archivos
- Edita manualmente los archivos para resolver
- Añade los archivos resueltos con
git add
- Completa el merge con
git commit
5. Colaboración con Git
Repositorios remotos
# Ver repositorios remotos
git remote -v
# Añadir repositorio remoto
git remote add origin https://github.com/usuario/repo.git
# Eliminar repositorio remoto
git remote remove origin
Comandos para colaboración
# Obtener cambios sin integrarlos
git fetch origin
# Obtener e integrar cambios
git pull origin main
# Enviar cambios locales al remoto
git push origin main
# Establecer upstream para simplificar comandos
git push -u origin main
Pull Requests (GitHub/GitLab)
- Fork del repositorio (opcional)
- Crea una rama para tu funcionalidad
- Realiza y confirma cambios
- Envía la rama al repositorio remoto
- Crea el Pull/Merge Request a través de la interfaz web
- Discusión, revisión y aprobación
6. Flujos de trabajo comunes
Gitflow
- main/master: Código de producción estable
- develop: Integraciones para próxima versión
- feature/x: Funcionalidades específicas
- release/x.y: Preparación para lanzamiento
- hotfix/x: Correcciones urgentes
GitHub Flow
- Crear rama desde main
- Añadir commits
- Abrir Pull Request
- Discutir y revisar
- Desplegar para pruebas
- Fusionar a main
Trunk-based development
- Todos trabajan en la rama principal
- Commits pequeños y frecuentes
- Uso de feature flags para ocultar funcionalidades incompletas
- Integración continua constante
7. Comandos avanzados y herramientas
Comandos avanzados
# Guardar cambios temporalmente
git stash
git stash pop
# Reescribir historia
git rebase main
git rebase -i HEAD~3
# Etiquetas para versiones
git tag v1.0.0
git tag -a v1.0.0 -m "Versión 1.0.0"
# Cherry-pick para aplicar commits específicos
git cherry-pick abc123
# Revertir commits
git revert abc123
.gitignore
Archivo para especificar qué archivos no deben versionarse:
# Ejemplos de .gitignore
node_modules/
*.log
.env
.DS_Store
Herramientas visuales
- IDE integrados: VS Code, IntelliJ, etc.
- GUI específicas: GitKraken, SourceTree, GitHub Desktop
- Extensiones de terminal: lazygit, tig
8. Resumen de comandos Git
Comandos por área de trabajo:
Workspace | Staging/Index | Local Repo | Remote Repo |
---|---|---|---|
git add | git commit | git push | git fetch |
git rm | git commit -a | git pull | git clone |
git mv | git reset | git merge | git remote |
git checkout | git reset --hard | git checkout | git pull |
git stash | git rm --cached | git rebase | git push --force |
9. Demo práctica
Escenario: Creación y colaboración en un proyecto
Paso 1: Configuración inicial
# Configurar Git
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
# Crear directorio del proyecto
mkdir proyecto-demo
cd proyecto-demo
Paso 2: Iniciar repositorio y primer commit
# Inicializar repositorio
git init
# Crear archivo README
echo "# Proyecto Demo" > README.md
# Verificar estado
git status
# Añadir al staging
git add README.md
# Crear primer commit
git commit -m "feat: primer commit del proyecto"
Paso 3: Desarrollo en ramas
# Crear rama para nueva funcionalidad
git checkout -b feature/nueva-funcionalidad
# Crear archivo para la funcionalidad
echo "function nuevaFuncionalidad() {}" > funcionalidad.js
# Añadir y commitear
git add funcionalidad.js
git commit -m "feat: implementa nueva funcionalidad"
# Volver a la rama principal
git checkout main
# Fusionar cambios
git merge feature/nueva-funcionalidad
Paso 4: Trabajando con remotos
# Añadir repositorio remoto
git remote add origin https://github.com/usuario/proyecto-demo.git
# Enviar cambios al remoto
git push -u origin main
# Simular trabajo de otro desarrollador
# (En un directorio diferente)
git clone https://github.com/usuario/proyecto-demo.git
cd proyecto-demo
echo "# Nueva sección" >> README.md
git add README.md
git commit -m "docs: actualiza README"
git push origin main
# Volver al repositorio original
cd ../proyecto-demo
git pull origin main
Paso 5: Resolución de conflictos
# Crear conflicto intencionalmente
echo "# MI versión del README" > README.md
git add README.md
git commit -m "docs: actualiza README con mi versión"
# Intentar pull (generará conflicto)
git pull origin main
# Resolver conflicto manualmente
# (Editar archivo README.md)
git add README.md
git commit -m "fix: resuelve conflicto en README"
git push origin main
10. Call to Action: Buenas Prácticas en Nuvu
Repository management & CI Automatization
En nuvu hemos establecido lineamientos oficiales para:
- Control estricto de versiones
- Flujos de trabajo con Git
- Convenciones de commits
- Proceso CI/CD
- Integración con SonarQube
- Métricas y umbrales de calidad
Consulta el documento completo en nuestro repositorio:
¡Gracias!
¿Preguntas?
Introducción a Git
By Juan G
Introducción a Git
- 12