Introduccion
Si estas aprendiendo a programar o ya tienes experiencia pero nunca has usado un sistema de control de versiones, esta guia es para ti. Git es la herramienta mas utilizada en el mundo del desarrollo de software para gestionar cambios en el codigo, y GitHub es la plataforma mas popular para alojar proyectos Git y colaborar con otros desarrolladores.
En este articulo vamos a cubrir todo lo que necesitas saber para empezar a usar Git y GitHub de forma efectiva, desde la instalacion hasta los pull requests, con ejemplos practicos que puedes seguir paso a paso en tu propia computadora.
Que es el control de versiones
Imagina que estas escribiendo un documento importante. Haces una version, luego otra, y otra mas. Para no perder las versiones anteriores, empiezas a guardar archivos como "documento_v1.docx", "documento_v2_final.docx", "documento_v2_final_DEFINITIVO.docx". Suena familiar? Este enfoque es caotico, propenso a errores y no escala cuando varias personas trabajan en el mismo proyecto.
El control de versiones es un sistema que registra los cambios realizados en archivos a lo largo del tiempo, permitiendote volver a versiones anteriores, comparar cambios, ver quien modifico que y cuando, y fusionar el trabajo de multiples personas sin conflictos. Git es un sistema de control de versiones distribuido, lo que significa que cada desarrollador tiene una copia completa del historial del proyecto en su maquina local.
Instalar Git
El primer paso es instalar Git en tu computadora. El proceso varia segun tu sistema operativo.
En Windows
Descarga el instalador oficial desde git-scm.com y ejecutalo. Durante la instalacion, puedes dejar las opciones por defecto. Una vez instalado, abre Git Bash (se instala automaticamente) para usar Git desde la terminal.
En macOS
# Usando Homebrew
brew install git
# O instalar Xcode Command Line Tools (incluye Git)
xcode-select --install
En Linux (Ubuntu/Debian)
sudo apt update
sudo apt install git
Verificar la instalacion
git --version
# Deberia mostrar algo como: git version 2.44.0
Configuracion inicial
Antes de empezar a usar Git, necesitas configurar tu nombre y correo electronico. Esta informacion se adjunta a cada commit que hagas para identificar quien realizo cada cambio.
# Configurar tu nombre
git config --global user.name "Tu Nombre"
# Configurar tu email (usa el mismo que usaras en GitHub)
git config --global user.email "tu@email.com"
# Verificar la configuracion
git config --list
Crear tu primer repositorio
Un repositorio (o "repo") es una carpeta que Git esta rastreando. Vamos a crear nuestro primer repositorio paso a paso.
# Crear una carpeta para tu proyecto
mkdir mi-primer-proyecto
cd mi-primer-proyecto
# Inicializar un repositorio Git en esta carpeta
git init
El comando git init crea una carpeta oculta llamada .git dentro de tu proyecto. Esta carpeta contiene toda la informacion del historial de versiones. No la modifiques ni la elimines manualmente.
El flujo basico: add y commit
El flujo de trabajo basico en Git tiene tres areas: el directorio de trabajo (donde editas tus archivos), el area de staging (donde preparas los cambios que vas a guardar) y el repositorio (donde se almacena el historial de versiones). Los comandos git add y git commit mueven los cambios entre estas areas.
# Crear un archivo de ejemplo
echo "# Mi Primer Proyecto" > README.md
echo "print('Hola mundo')" > main.py
# Ver el estado del repositorio
git status
# Mostrara que README.md y main.py son archivos nuevos no rastreados
# Agregar archivos al area de staging
git add README.md
git add main.py
# O agregar todos los archivos de una vez
git add .
# Verificar que los archivos estan en staging
git status
# Mostrara los archivos listos para ser comprometidos
# Crear un commit (guardar una version)
git commit -m "Primer commit: agregar README y script principal"
Un commit es como una foto instantanea de tu proyecto en un momento dado. El mensaje del commit (lo que va despues de -m) debe describir brevemente que cambios hiciste y por que. Buenos mensajes de commit son fundamentales para entender el historial del proyecto.
Ver el historial de cambios
# Ver el historial de commits
git log
# Ver historial en formato resumido
git log --oneline
# Ver los cambios de un archivo especifico
git log --oneline -- main.py
# Ver que cambio en cada commit
git log -p
# Ver los cambios que aun no has agregado al staging
git diff
# Ver los cambios que estan en staging
git diff --staged
Ramas (branches)
Las ramas son una de las caracteristicas mas poderosas de Git. Una rama te permite crear una linea de desarrollo independiente sin afectar el codigo principal. Esto es ideal para desarrollar nuevas funcionalidades, corregir errores o experimentar con ideas sin riesgo de romper lo que ya funciona.
# Ver las ramas existentes (el asterisco indica la rama actual)
git branch
# Crear una nueva rama
git branch nueva-funcionalidad
# Cambiar a la nueva rama
git checkout nueva-funcionalidad
# O crear y cambiar en un solo comando
git checkout -b otra-funcionalidad
# Hacer cambios en la nueva rama
echo "def suma(a, b): return a + b" > utils.py
git add utils.py
git commit -m "Agregar funcion de suma en utils.py"
# Volver a la rama principal
git checkout main
Cuando vuelves a la rama main, el archivo utils.py desaparece porque solo existe en la rama nueva-funcionalidad. Los cambios estan aislados hasta que decidas fusionar las ramas.
Fusionar ramas (merge)
Una vez que has terminado de desarrollar una funcionalidad en una rama separada y estas satisfecho con los cambios, puedes fusionarla con la rama principal.
# Asegurarte de estar en la rama que recibira los cambios (main)
git checkout main
# Fusionar los cambios de nueva-funcionalidad en main
git merge nueva-funcionalidad
# Si ya no necesitas la rama, puedes eliminarla
git branch -d nueva-funcionalidad
Resolver conflictos
A veces, dos ramas modifican las mismas lineas del mismo archivo. Cuando intentas fusionarlas, Git no puede decidir automaticamente cual version mantener y genera un conflicto. Git marca las secciones conflictivas en el archivo con marcadores especiales que debes resolver manualmente.
# Si hay un conflicto, el archivo se vera asi:
# <<<<<<< HEAD
# codigo de la rama actual
# =======
# codigo de la rama que estas fusionando
# >>>>>>> nueva-funcionalidad
# Para resolver el conflicto:
# 1. Abre el archivo y elige cual codigo mantener
# 2. Elimina los marcadores de conflicto
# 3. Agrega y commitea la resolucion
git add archivo_con_conflicto.py
git commit -m "Resolver conflicto de merge en archivo_con_conflicto.py"
Introduccion a GitHub
GitHub es una plataforma web que aloja repositorios Git en la nube. Permite colaborar con otros desarrolladores, hacer seguimiento de issues (problemas), revisar codigo mediante pull requests, automatizar flujos de trabajo y mucho mas. Es la plataforma mas popular del mundo para el desarrollo de software colaborativo, con mas de 100 millones de desarrolladores.
Crear un repositorio en GitHub
Para crear un repositorio en GitHub, inicia sesion en tu cuenta, haz clic en el boton "New" o "Nuevo repositorio", dale un nombre, elige si sera publico o privado y crealo. GitHub te mostrara instrucciones para conectar tu repositorio local con el remoto.
Conectar con GitHub: push y pull
# Agregar un repositorio remoto (origin es el nombre convencional)
git remote add origin https://github.com/tu-usuario/mi-primer-proyecto.git
# Verificar que el remoto se agrego correctamente
git remote -v
# Subir tus commits al repositorio remoto
git push -u origin main
# -u establece origin/main como la rama remota por defecto
# Para subidas futuras, solo necesitas:
git push
# Descargar cambios del repositorio remoto
git pull
El comando git push sube tus commits locales al servidor remoto, y git pull descarga los commits del servidor remoto a tu maquina local. Es buena practica hacer git pull antes de empezar a trabajar cada dia para asegurarte de tener la version mas reciente del codigo.
Clonar un repositorio existente
Si quieres obtener una copia de un repositorio que ya existe en GitHub (ya sea tuyo o de otro desarrollador), usas el comando git clone.
# Clonar un repositorio
git clone https://github.com/usuario/nombre-del-repo.git
# Esto crea una carpeta con el nombre del repositorio
# y descarga todo el historial de commits
cd nombre-del-repo
git log --oneline
Pull Requests
Un Pull Request (PR) es una solicitud para fusionar los cambios de una rama en otra, pero con un paso intermedio de revision. En lugar de fusionar directamente, creas un PR que permite a otros miembros del equipo revisar tu codigo, hacer comentarios, sugerir cambios y aprobar la fusion.
Flujo de trabajo con Pull Requests
# 1. Crear una nueva rama para tu funcionalidad
git checkout -b feature/agregar-login
# 2. Hacer tus cambios y commits
echo "def login(user, password): pass" > auth.py
git add auth.py
git commit -m "Agregar modulo de autenticacion"
# 3. Subir la rama al repositorio remoto
git push -u origin feature/agregar-login
# 4. Ir a GitHub y crear el Pull Request desde la interfaz web
# GitHub te mostrara un boton para crear el PR automaticamente
Una vez que el PR es aprobado y fusionado en GitHub, puedes actualizar tu rama local y eliminar la rama de la funcionalidad.
# Volver a main y actualizar
git checkout main
git pull
# Eliminar la rama local que ya fue fusionada
git branch -d feature/agregar-login
El archivo .gitignore
No todos los archivos de tu proyecto deben ser rastreados por Git. Archivos de configuracion local, dependencias descargadas, archivos compilados, credenciales y logs no deben incluirse en el repositorio. El archivo .gitignore le dice a Git que archivos y carpetas debe ignorar.
# Crear un archivo .gitignore
cat > .gitignore << 'EOF'
# Entornos virtuales de Python
venv/
.env
# Dependencias de Node.js
node_modules/
# Archivos compilados de Python
__pycache__/
*.pyc
# Archivos del sistema operativo
.DS_Store
Thumbs.db
# Archivos de configuracion del IDE
.vscode/
.idea/
# Archivos de logs
*.log
# Variables de entorno y secretos
.env
.env.local
credentials.json
EOF
# Agregar el .gitignore al repositorio
git add .gitignore
git commit -m "Agregar archivo .gitignore"
Comandos utiles adicionales
# Deshacer cambios en un archivo (antes de hacer add)
git checkout -- archivo.py
# Quitar un archivo del staging (despues de git add, antes de commit)
git reset HEAD archivo.py
# Modificar el ultimo commit (por ejemplo, corregir el mensaje)
git commit --amend -m "Nuevo mensaje del commit"
# Ver quien modifico cada linea de un archivo
git blame archivo.py
# Guardar cambios temporalmente sin hacer commit
git stash
# Recuperar los cambios guardados
git stash pop
# Ver las diferencias entre dos ramas
git diff main..feature/mi-rama
# Ver un resumen de commits entre ramas
git log main..feature/mi-rama --oneline
Buenas practicas con Git
Para aprovechar al maximo Git y GitHub, sigue estas recomendaciones que te ayudaran a mantener un historial limpio y un flujo de trabajo eficiente:
- Haz commits pequenos y frecuentes: Cada commit debe representar un cambio logico y coherente. Es mejor tener muchos commits pequenos que pocos commits gigantes.
- Escribe mensajes de commit descriptivos: Un buen mensaje de commit describe que cambio y por que. Usa el imperativo: "Agregar validacion de email" en lugar de "Se agrego validacion de email".
- Usa ramas para cada funcionalidad: Nunca trabajes directamente en la rama main. Crea una rama para cada funcionalidad, correccion o tarea independiente.
- Haz pull antes de push: Antes de subir tus cambios, siempre descarga los cambios mas recientes del repositorio remoto para evitar conflictos.
- Revisa tus cambios antes de commitear: Usa
git diffygit statuspara verificar exactamente que estas por guardar. - No subas archivos sensibles: Credenciales, API keys y archivos de configuracion con datos sensibles nunca deben estar en un repositorio. Usa
.gitignorepara excluirlos.
Conclusion
Git y GitHub son herramientas fundamentales para cualquier persona que trabaje con codigo. Aunque al principio pueden parecer complicados, la realidad es que el flujo basico de trabajo (add, commit, push, pull) se vuelve natural en poco tiempo. Las funcionalidades avanzadas como branches, merge y pull requests las iras dominando a medida que las necesites.
Lo mas importante es empezar a usar Git en tus proyectos, incluso los personales. No esperes a trabajar en equipo para aprender control de versiones. Cada proyecto, por pequeno que sea, se beneficia de tener un historial de cambios claro y la posibilidad de volver a versiones anteriores cuando algo sale mal.
Crea tu cuenta de GitHub si aun no la tienes, inicializa Git en tu proximo proyecto y empieza a practicar los comandos que aprendiste en esta guia. Con el tiempo, Git se convertira en una extension natural de tu flujo de trabajo como desarrollador.