Control de versiones desde cero — edición Linux
Nota
No necesitas experiencia previa. Si puedes abrir una terminal, ya estás listo.
Git es un sistema de control de versiones — registra cada cambio que haces en tus archivos a lo largo del tiempo.
Imagínalo como un sistema de guardado de un videojuego, pero para código:
Tip
Git ≠ GitHub. Git es la herramienta. GitHub es un sitio web que aloja tus repositorios de Git en línea.
Sin Git
project_final.pyproject_final_v2.pyproject_FINAL_USE_THIS.pyproject_FINAL_fixed.pyproject_FINAL_fixed2_omg.pyCon Git
project.pyAbre una terminal y ejecuta el comando de tu distro:
Ubuntu / Debian / Mint
Fedora / RHEL / CentOS
Arch / Manjaro
Verifica la instalación:
Antes de usar Git, dile quién eres. Esta información se adjunta a cada commit que hagas.
Configura tu editor de texto preferido (para los mensajes de commit):
# Usar VS Code
git config --global core.editor "code --wait"
# Usar nano (el más simple para principiantes)
git config --global core.editor "nano"
# Usar vim
git config --global core.editor "vim"Revisa tu configuración:
| Concepto | Qué significa |
|---|---|
| Repository (repo) | Una carpeta rastreada por Git |
| Working directory | Tus archivos tal como los ves |
| Staging area | Cambios seleccionados para el próximo commit |
| Commit | Una instantánea guardada de tus cambios en staging |
| Branch | Una línea independiente de desarrollo |
| Remote | Una copia del repo alojada en línea (GitHub, etc.) |
┌─────────────────────────────────────────────────────┐
│ YOUR PROJECT │
│ │
│ ┌─────────────┐ git add ┌──────────────┐ │
│ │ Working │ ────────► │ Staging │ │
│ │ Directory │ │ Area │ │
│ └─────────────┘ └──────┬───────┘ │
│ ▲ │ git commit │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ └──────────────────│ Repository │ │
│ git checkout │ (History) │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────┘
Nota
git add todavía no guarda nada — solo prepara los cambios. git commit es el guardado real.
Opción A — Empezar desde cero (proyecto nuevo)
Esto crea una carpeta oculta .git/ — ahí es donde Git guarda todo.
Opción B — Clonar un repo existente desde GitHub
git clone https://github.com/username/repository.git
# Clonar en una carpeta con un nombre específico
git clone https://github.com/username/repository.git my-folderRevisa el estado de tu repo en cualquier momento:
Paso 1: Crea o modifica un archivo
Paso 2: Revisa qué ve Git
Paso 3: Agrega el archivo al staging
Paso 4: Haz commit con un mensaje
Un buen mensaje de commit dice qué cambió y por qué, no cómo.
❌ Mensajes malos
fixstuffchangesasdfghfinalfinal for real✅ Mensajes buenos
Add login form validationFix crash when user list is emptyRemove deprecated API callsUpdate README with install stepsTip
Usa el modo imperativo: “Add feature” en vez de “Added feature”.
Ver todos los commits:
Vista compacta de una línea (mucho más agradable):
git log --oneline
# a3f1c2d Add login form
# 9b2e81a Fix crash on empty list
# 4c7a012 Initial commitVer qué cambió realmente en cada commit:
Ver cambios que aún no están en staging:
Ver cambios ya en staging:
Sacar un archivo del staging (conservando tus ediciones):
Descartar todas las ediciones de un archivo (volver al último commit):
Advertencia
git restore filename.py descarta permanentemente los cambios no guardados. No hay deshacer.
Deshacer el último commit (conservando los archivos intactos):
Corregir el mensaje del último commit:
Un branch es una copia independiente de tu proyecto donde puedes trabajar libremente sin afectar el código principal.
main ──●──●──●──────────────●──▶
\ /
feature ●──●──●──●──
Crear y cambiar a un branch nuevo:
Listar todos los branches:
Cambiar entre branches:
Eliminar un branch (después de mergear):
Una vez que tu feature está lista, mergéala de vuelta a main:
# 1. Cambia al branch de destino
git switch main
# 2. Mergea el branch feature en él
git merge feature/loginSi no hay conflictos, Git mergea automáticamente.
Si hay un conflicto, Git marca el archivo afectado:
<<<<<<< HEAD
print("Hello from main")
=======
print("Hello from feature")
>>>>>>> feature/login
Edita el archivo para conservar lo que quieras, elimina los marcadores, y luego:
Agregar un remote a tu repo local:
Revisar tus remotes:
Hacer push de tus commits a GitHub por primera vez:
Hacer push después de la primera vez:
Traer los últimos cambios desde GitHub:
# 1. Trae los últimos cambios de tus compañeros
git pull
# 2. Crea un branch para tu tarea
git switch -c feature/my-task
# 3. Haz tu trabajo... edita archivos...
# 4. Revisa qué cambió
git status
git diff
# 5. Agrega al staging y haz commit
git add .
git commit -m "Implement my task"
# 6. Haz push a GitHub
git push -u origin feature/my-task
# 7. Abre un Pull Request en GitHub y pide revisión.gitignoreDile a Git que ignore archivos que nunca quieres commitear (secretos, logs, artefactos de build):
Ejemplo de .gitignore para un proyecto de Python:
# Python
__pycache__/
*.pyc
*.pyo
.venv/
venv/
*.egg-info/
# Variables de entorno (¡NUNCA las commitees!)
.env
# Archivos del editor
.vscode/
.idea/
# Archivos del sistema operativo
.DS_Store
Thumbs.db
En lugar de escribir tu contraseña en cada push, usa una llave SSH:
Paso 1: Genera un par de llaves
Paso 2: Copia tu llave pública
Paso 3: Agrégala a GitHub
GitHub → Settings → SSH and GPG keys → New SSH key → Paste → Save
Paso 4: Prueba la conexión
Paso 5: Usa URLs SSH en vez de HTTPS
| Comando | Qué hace |
|---|---|
git init |
Inicia un repo nuevo |
git clone <url> |
Copia un repo remoto localmente |
git status |
Muestra el estado actual |
git add . |
Agrega todos los cambios al staging |
git commit -m "msg" |
Guarda una instantánea |
git log --oneline |
Ver el historial de commits |
git push |
Sube al remote |
git pull |
Descarga del remote |
git switch -c <name> |
Crea y cambia de branch |
git merge <branch> |
Mergea un branch |
git restore <file> |
Descarta cambios de un archivo |
git diff |
Muestra cambios no guardados en staging |
“Hice commit a main por accidente”
git reset --soft HEAD~1 # Deshace el commit, conserva los cambios en staging
git switch -c feature/oops # Mueve el trabajo a un branch nuevo“Borré un archivo por accidente”
“Necesito ver cómo era el proyecto hace 3 commits”
git log --oneline # Encuentra el hash del commit
git checkout a3f1c2d # Mira alrededor (solo lectura)
git switch main # Regresa“Mi push fue rechazado”
El flujo de oro
git pull — sincroniza primerogit switch -c branch — trabaja aisladogit add . → git commitgit push — comparte tu trabajoLas reglas de oro
.env ni secretosgit status es tu mejor amigoTip
La mejor manera de aprender Git es usarlo todos los días, incluso en proyectos personales. Rompe cosas, recupéralas — así es como se entiende de verdad.