Git desde Cero

Guía completa para aprender Git desde fundamentos hasta conceptos avanzados.

¿Qué es Git?

📦

Sistema de Control de Versiones

Git es un sistema de control de versiones distribuido que permite rastrear cambios en el código fuente durante el desarrollo de software.

Para Qué Sirve

Controlar versiones de código, colaborar en equipo, mantener historial de cambios, experimentar con ramas y revertir errores.

🔧

Características Principales

Distribuido, rápido, branching eficiente, merge potente, staging area, y soporte para workflows distribuidos.

💡 ¿Sabías qué?

Git fue creado por Linus Torvalds en 2005 para el desarrollo del kernel de Linux. Su nombre significa "persona desagradable" en inglés británico coloquial.

Arquitectura de Git

Git utiliza un modelo de tres árboles (Working Directory, Staging Area, Repository) para gestionar los cambios.

Working Directory

Tus archivos de trabajo

⬇️ git add

Staging Area (Index)

Archivos preparados para commit

⬇️ git commit

Local Repository

Historial de commits (.git)

⬇️ git push

Remote Repository

Repositorio remoto (GitHub, GitLab)

📊 Conceptos Clave

  • Commit - Instantánea de cambios
  • Branch - Línea de desarrollo
  • Merge - Combinar ramas
  • Remote - Repositorio remoto

💾 Comandos Esenciales

  • git init - Inicializar repositorio
  • git clone - Clonar repositorio
  • git commit - Guardar cambios
  • git push/pull - Sincronizar remoto

🔒 Workflows Populares

  • Git Flow - Flujo tradicional
  • GitHub Flow - Flujo simplificado
  • Trunk-Based - Desarrollo continuo
  • Feature Branch - Por funcionalidad

📖 Temas del Curso

Haz clic en cualquier tema para ver el contenido detallado

📌 Introducción a Git

Git es un sistema de control de versiones distribuido que permite rastrear cambios en el código fuente durante el desarrollo de software.

Historia:

Git fue creado por Linus Torvalds en 2005 para el desarrollo del kernel de Linux. Su nombre significa "persona desagradable" en inglés británico coloquial.

Conceptos Fundamentales:

  • Repositorio: Directorio donde Git almacena todos los archivos y el historial
  • Commit: Instantánea de cambios en un momento específico
  • Branch: Línea de desarrollo independiente
  • Merge: Combinar cambios de diferentes ramas
💡 ¿Sabías qué?

Git es distribuido, lo que significa que cada desarrollador tiene una copia completa del repositorio, incluyendo todo el historial.

← Volver a temas

🔧 Instalación de Git

En Windows:

  1. Descarga Git desde git-scm.com
  2. Ejecuta el instalador
  3. Selecciona las opciones por defecto
  4. Click en Finish

En macOS:

brew install git

En Linux:

sudo apt-get install git  # Debian/Ubuntu
sudo yum install git     # CentOS/RHEL

Configuración inicial:

git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
git config --global init.defaultBranch main
← Volver a temas

📦 Conceptos Básicos

Los Tres Árboles de Git:

  • Working Directory: Tus archivos de trabajo actuales
  • Staging Area (Index): Área donde preparas los cambios para commit
  • Repository (.git): Donde Git almacena todos los commits

Comandos Fundamentales:

# Inicializar repositorio
git init

# Clonar repositorio
git clone https://github.com/usuario/repo.git

# Ver estado
git status

# Agregar archivos al staging
git add archivo.txt
git add .  # Todos los archivos

# Crear commit
git commit -m "Mensaje descriptivo"
← Volver a temas

🌿 Branching y Merging

Trabajar con Ramas:

# Ver ramas existentes
git branch

# Crear nueva rama
git branch feature-nueva

# Cambiar de rama
git checkout feature-nueva

# Crear y cambiar en un solo comando
git checkout -b feature-nueva

# Volver a main
git checkout main

Merge (Combinar Ramas):

# Estando en main, mergear feature-nueva
git checkout main
git merge feature-nueva

# Eliminar rama después del merge
git branch -d feature-nueva

Resolución de Conflictos:

Cuando Git no puede mergear automáticamente, debes editar los archivos marcados con conflictos y luego hacer commit.

← Volver a temas

✅ Buenas Prácticas

Mensajes de Commit:

  • Usa el modo imperativo ("Add feature" no "Added feature")
  • Sé conciso pero descriptivo (máximo 50 caracteres en el asunto)
  • Explica el qué y el por qué, no el cómo

Convención de Ramas:

main              # Rama principal de producción
develop         # Rama de desarrollo
feature/xxx     # Nuevas funcionalidades
bugfix/xxx      # Corrección de bugs
hotfix/xxx      # Correcciones urgentes
release/x.y     # Preparación de releases

Git Hooks:

Scripts que se ejecutan automáticamente en ciertos eventos (pre-commit, post-merge, etc.).

← Volver a temas

🚀 Casos Reales

Git Flow:

Workflow tradicional con ramas main, develop, feature, release y hotfix.

GitHub Flow:

  • Crear rama desde main
  • Hacer commits
  • Abrir Pull Request
  • Code review y discusión
  • Merge a main

CI/CD con Git:

Integración continua que ejecuta tests automáticamente en cada push. GitHub Actions, GitLab CI, Jenkins.

← Volver a temas

📋 Proyecto Final

Desarrolla un proyecto completo aplicando todo lo aprendido:

  1. Inicializar repositorio Git
  2. Crear rama develop
  3. Crear ramas feature para cada funcionalidad
  4. Hacer commits descriptivos
  5. Mergear a develop
  6. Crear Pull Request a main
  7. Code review y merge final
💡 Proyecto sugerido:

Crea un repositorio con un proyecto real, aplicando Git Flow, commits semánticos y Pull Requests.

← Volver a temas

🔀 Ramas y Tags

Gestión Avanzada de Ramas:

# Renombrar rama
git branch -m nombre_viejo nombre_nuevo

# Eliminar rama local
git branch -d nombre_rama

# Eliminar rama remota
git push origin --delete nombre_rama

# Ver ramas remotas
git branch -r

# Actualizar ramas remotely
git fetch --all

Tags (Versiones):

# Crear tag
git tag v1.0.0

# Tag con anotación
git tag -a v1.0.0 -m "Versión 1.0.0"

# Ver tags
git tag -l

# Subir tags
git push origin --tags

Ramas Huérfanas:

git checkout --orphan gh-pages
git rm -rf .
# Agregar archivos para GitHub Pages
← Volver a temas

🔄 Git Stash y Rebase

Git Stash (Guardar cambios temporales):

# Guardar cambios
git stash

# Guardar con mensaje
git stash push -m "Trabajo en progreso"

# Ver stashes
git stash list

# Aplicar último stash
git stash apply

# Aplicar y eliminar
git stash pop

# Eliminar stash
git stash drop

Rebase (Reescribir historial):

# Rebase interactivo
git rebase -i HEAD~3

# Rebase onto
git rebase main feature

# Continuar después de resolver conflictos
git rebase --continue

# Abortar rebase
git rebase --abort

Cherry-pick:

git cherry-pick commit-hash
← Volver a temas

🔍 Git Log y Debugging

Git Log Avanzado:

git log --oneline              # Formato corto
git log --graph --oneline --all  # Con ramas
git log -p archivo.txt       # Historial de archivo
git log --author="Juan"      # Filtrar por autor
git log --since="2 weeks ago" # Filtrar por fecha

Blame y Bisect:

git blame archivo.txt         # Quién modificó cada línea
git bisect start             # Iniciar búsqueda binaria
git bisect bad               # Marcar como defectuoso
git bisect good v1.0.0       # Marcar como correcto
git bisect reset             # Terminar búsqueda

Buscar en Commits:

git log --grep="fix"         # Buscar en mensajes
git show commit-hash         # Ver commit específico
← Volver a temas

🔧 Git Hooks y Personalización

Git Hooks:

# .git/hooks/pre-commit
#!/bin/bash
npm test
if [ $? -ne 0 ]; then
    echo "Tests fallidos, no se puede hacer commit"
    exit 1
fi

Aliases:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --all"

Configuraciones Útiles:

git config --global core.editor vim
git config --global pull.rebase false
git config --global push.default current
← Volver a temas

📱 Git en Equipos y Workflows

Workflows Populares:

  • Git Flow: main, develop, features, releases, hotfix
  • GitHub Flow: main → feature → PR → merge
  • Trunk-Based: Commits pequeños a main

Code Review:

git request-pull origin/main my-branch

Trabajo en Equipo:

git fetch origin
git rebase origin/main
git push --force-with-lease  # Nunca --force

Semver (Versionado Semántico):

major.minor.patch (1.2.3)
- 1.0.0 → 2.0.0 (Breaking changes)
- 1.0.0 → 1.1.0 (Nuevas features)
- 1.0.0 → 1.0.1 (Bug fixes)
← Volver a temas

Ejemplos de Código

Inicializar Repositorio

# Inicializar nuevo repositorio
git init

# Clonar repositorio existente
git clone https://github.com/usuario/repo.git

# Ver estado del repositorio
git status

Commits Básicos

# Agregar archivos al staging
git add archivo.txt
git add .

# Crear commit
git commit -m "Mensaje descriptivo"

# Ver historial
git log --oneline

Branches y Merge

# Crear rama
git branch feature-nueva

# Cambiar de rama
git checkout feature-nueva

# Crear y cambiar
git checkout -b feature-nueva

# Mergear
git merge feature-nueva

Trabajo Remoto

# Agregar remoto
git remote add origin url

# Push a remoto
git push origin main

# Pull de remoto
git pull origin main

👨‍💻 Desarrollado por Isaac Esteban Haro Torres

Ingeniero en Sistemas · Full Stack · Automatización · Data

📧 Email: zackharo1@gmail.com

📱 WhatsApp: 098805517

💻 GitHub: github.com/ieharo1

🌐 Portafolio: ieharo1.github.io/portafolio-isaac.haro/