¿Qué es Git?
Git es un sistema de control de versiones distribuido que permite rastrear cambios en archivos, colaborar con otros desarrolladores y mantener un historial completo de tu proyecto. Es esencial para cualquier programador.
¿Qué es GitHub?
GitHub es una plataforma de hosting para repositorios Git. Permite almacenar código en la nube, colaborar con otros desarrolladores y contribuir a proyectos open source.
Instalación de Git
Windows
# Descargar desde: https://git-scm.com/download/win
# Ejecutar el instalador y seguir los pasosLinux
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install git
# Fedora
sudo dnf install gitmacOS
# Con Homebrew
brew install git
# O descargar desde: https://git-scm.com/download/macVerificar Instalación
git --version
# Debería mostrar: git version 2.x.xConfiguración Inicial
# Configurar nombre de usuario
git config --global user.name "Tu Nombre"
# Configurar email
git config --global user.email "tu@email.com"
# Ver configuración
git config --list
# Ver configuración específica
git config user.name
git config user.emailCrear un Repositorio
Repositorio Local Nuevo
# Crear carpeta del proyecto
mkdir mi-proyecto
cd mi-proyecto
# Inicializar repositorio Git
git init
# Verificar
ls -la # Verás carpeta .gitClonar Repositorio Existente
# Clonar desde GitHub
git clone https://github.com/usuario/repositorio.git
# Clonar con nombre diferente
git clone https://github.com/usuario/repositorio.git mi-carpetaFlujo Básico de Git
Estados de Archivos
1. Working Directory: Archivos modificados
2. Staging Area: Archivos listos para commit
3. Repository: Archivos guardados en el historial
Comandos Básicos
# Ver estado de archivos
git status
# Agregar archivo al staging area
git add archivo.txt
# Agregar todos los archivos
git add .
# Hacer commit (guardar cambios)
git commit -m "Mensaje descriptivo del cambio"
# Agregar y hacer commit en un paso (solo archivos rastreados)
git commit -am "Mensaje del commit"
# Ver historial de commits
git log
# Ver historial resumido
git log --oneline
# Ver últimos 5 commits
git log -5Ejemplo Práctico Completo
# 1. Crear proyecto
mkdir mi-web
cd mi-web
git init
# 2. Crear archivo
echo "# Mi Proyecto Web" > README.md
echo "<h1>Hola Mundo</h1>" > index.html
# 3. Ver estado
git status
# Muestra archivos sin rastrear (untracked)
# 4. Agregar archivos
git add README.md
git add index.html
# O todos a la vez:
git add .
# 5. Hacer commit
git commit -m "Primer commit: agregar README e index"
# 6. Modificar archivo
echo "<p>Contenido nuevo</p>" >> index.html
# 7. Ver cambios
git status
git diff # Muestra diferencias
# 8. Commit de cambios
git add index.html
git commit -m "Agregar párrafo al index"
# 9. Ver historial
git log --onelineTrabajar con Branches (Ramas)
# Ver ramas
git branch
# Crear nueva rama
git branch nueva-funcionalidad
# Cambiar a rama
git checkout nueva-funcionalidad
# Crear y cambiar en un comando
git checkout -b otra-rama
# Fusionar rama (merge)
git checkout main
git merge nueva-funcionalidad
# Eliminar rama
git branch -d nueva-funcionalidad
# Eliminar rama sin fusionar (forzar)
git branch -D rama-a-eliminarConectar con GitHub
Crear Repositorio en GitHub
1. Ve a github.com y haz login
2. Clic en el botón + → New repository
3. Elige nombre, descripción y visibilidad
4. Clic en Create repository
Conectar Repositorio Local
# Agregar remote
git remote add origin https://github.com/tu-usuario/tu-repo.git
# Verificar remote
git remote -v
# Cambiar nombre de rama a main (si está en master)
git branch -M main
# Subir código (push)
git push -u origin main
# Siguientes pushes
git pushPull y Push
# Descargar cambios del repositorio remoto
git pull
# Subir cambios al repositorio remoto
git push
# Push de rama específica
git push origin nombre-rama
# Pull de rama específica
git pull origin nombre-ramaIgnorar Archivos (.gitignore)
# Crear archivo .gitignore
touch .gitignore# Contenido de .gitignore
# Archivos de Python
__pycache__/
*.pyc
*.pyo
*.egg-info/
venv/
.env
# Node.js
node_modules/
npm-debug.log
# IDEs
.vscode/
.idea/
*.swp
# Sistema
.DS_Store
Thumbs.db
# Archivos temporales
*.log
*.tmp
# Bases de datos
*.db
*.sqliteComandos Útiles
Ver Cambios
# Ver cambios no guardados
git diff
# Ver cambios en staging
git diff --staged
# Ver cambios de un archivo específico
git diff archivo.txt
# Ver cambios entre commits
git diff commit1 commit2Deshacer Cambios
# Descartar cambios en archivo (antes de add)
git checkout -- archivo.txt
# Sacar archivo del staging
git reset archivo.txt
# Deshacer último commit (mantener cambios)
git reset --soft HEAD~1
# Deshacer último commit (descartar cambios)
git reset --hard HEAD~1
# Revertir commit (crear nuevo commit que deshace)
git revert commit_hashVer Historial
# Log detallado
git log
# Log resumido
git log --oneline
# Log con gráfico de ramas
git log --oneline --graph --all
# Log de un archivo
git log archivo.txt
# Ver cambios de un commit
git show commit_hashTrabajar con Ramas - Flujo Completo
# 1. Crear rama para nueva funcionalidad
git checkout -b feature/login
# 2. Hacer cambios
echo "Sistema de login" > login.py
git add login.py
git commit -m "Agregar sistema de login"
# 3. Más cambios
echo "Validación de usuario" >> login.py
git commit -am "Agregar validación"
# 4. Subir rama a GitHub
git push origin feature/login
# 5. En GitHub: Crear Pull Request
# 6. Después de aprobar, fusionar en main
# 7. En local: actualizar main
git checkout main
git pull
# 8. Eliminar rama local
git branch -d feature/loginColaboración en GitHub
Fork y Pull Request
1. Fork: Copia el repositorio a tu cuenta
2. Clone: Clona tu fork localmente
3. Branch: Crea rama para tus cambios
4. Commit: Haz commits de tus cambios
5. Push: Sube tu rama a tu fork
6. Pull Request: Solicita que tus cambios se fusionen
# 1. Fork en GitHub (botón Fork)
# 2. Clonar tu fork
git clone https://github.com/tu-usuario/proyecto-fork.git
cd proyecto-fork
# 3. Agregar upstream (repositorio original)
git remote add upstream https://github.com/usuario-original/proyecto.git
# 4. Crear rama
git checkout -b mi-contribucion
# 5. Hacer cambios y commits
echo "Mi aporte" > nuevo-archivo.txt
git add nuevo-archivo.txt
git commit -m "Agregar mi contribución"
# 6. Push a tu fork
git push origin mi-contribucion
# 7. En GitHub: Crear Pull Request desde tu ramaMantener Fork Actualizado
# Ver remotes
git remote -v
# Obtener cambios del upstream
git fetch upstream
# Fusionar cambios en tu main
git checkout main
git merge upstream/main
# Subir a tu fork
git push origin mainResolver Conflictos
# Si hay conflicto al fusionar:
# Git marcará los archivos con conflicto
# Ver archivos con conflicto
git status
# Abrir archivo y verás algo como:
# <<<<<<< HEAD
# Tu código
# =======
# Código de la otra rama
# >>>>>>> rama-otra
# Edita el archivo, resuelve el conflicto
# Elimina las marcas <<<, ===, >>>
# Agregar archivo resuelto
git add archivo-resuelto.txt
# Completar merge
git commit -m "Resolver conflicto en archivo"
# Si quieres cancelar merge
git merge --abortGitHub Pages - Hosting Gratis
# 1. Crear rama gh-pages
git checkout -b gh-pages
# 2. Asegurarte de tener index.html
echo "<h1>Mi sitio</h1>" > index.html
git add index.html
git commit -m "Agregar página principal"
# 3. Subir a GitHub
git push origin gh-pages
# Tu sitio estará en:
# https://tu-usuario.github.io/nombre-repo/Comandos de Emergencia
# Ver qué rama estás
git branch
# Guardar cambios temporalmente sin commit
git stash
# Recuperar cambios guardados
git stash pop
# Ver stashes guardados
git stash list
# Limpiar archivos no rastreados
git clean -fd
# Ver remotes configurados
git remote -v
# Cambiar URL del remote
git remote set-url origin nueva-urlBuenas Prácticas
- Commits frecuentes: Haz commits pequeños y específicos
- Mensajes descriptivos: Explica QUÉ y POR QUÉ
- Una funcionalidad por rama: No mezcles cambios no relacionados
- Pull antes de push: Mantén tu código actualizado
- .gitignore desde inicio: No subas archivos innecesarios
- No subir credenciales: Usa variables de entorno
- README.md: Documenta tu proyecto
Formato de Mensajes de Commit
# Bueno:
git commit -m "Agregar validación de email en formulario de registro"
git commit -m "Fix: corregir error en cálculo de totales"
git commit -m "Refactor: optimizar consulta de base de datos"
# Malo:
git commit -m "cambios"
git commit -m "fix"
git commit -m "actualización"Recursos Útiles
- Documentación oficial: git-scm.com/doc
- GitHub Learning Lab: lab.github.com
- Git Cheat Sheet: Hoja de referencia rápida
- GitKraken: Cliente visual para Git
- Oh My Git!: Juego para aprender Git
Conclusión
Git y GitHub son herramientas esenciales para cualquier desarrollador. Permiten colaborar eficientemente, mantener un historial completo de cambios y trabajar en proyectos de cualquier tamaño. Practica estos comandos regularmente y pronto se volverán parte natural de tu flujo de trabajo.