Tecnología que te entiende
Git y GitHub desde cero: control de versiones para todos
Programación

Git y GitHub desde cero: control de versiones para todos

25 Jan 2026 3 min de lectura 997 vistas

Git es la herramienta más importante del desarrollo de software moderno. Sin importar si programas en PHP, Python o Java — si no sabes Git, no eres profesional. Esta guía te lleva de cero a flujo de trabajo real en equipo.

¿Qué es Git y por qué importa?

Git es un sistema de control de versiones distribuido. Guarda un historial completo de todos los cambios en tu código, te permite volver a cualquier punto en el tiempo, trabajar en paralelo con un equipo y fusionar cambios sin perder trabajo. GitHub es una plataforma web que aloja repositorios Git — no son lo mismo.

Configuración inicial (una sola vez)

# Instalar Git
# Linux: sudo apt install git
# macOS: brew install git
# Windows: git-scm.com

# Configurar tu identidad
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
git config --global init.defaultBranch main

# Ver configuración
git config --list

Los tres estados de Git

Cada archivo en un repositorio puede estar en uno de tres estados:

  • Working Directory: tus archivos actuales con cambios sin guardar
  • Staging Area (Index): cambios preparados para el próximo commit
  • Repository: historial permanente de commits
# Iniciar un repositorio nuevo
git init mi-proyecto
cd mi-proyecto

# O clonar uno existente
git clone https://github.com/usuario/repo.git

# Ver el estado actual
git status

# Agregar archivos al staging area
git add archivo.php          # un archivo específico
git add .                    # todos los cambios
git add *.php                # todos los PHP

# Hacer un commit (guardar en el historial)
git commit -m "Agregar página de inicio con navbar"

# Ver el historial
git log --oneline --graph

Flujo de trabajo con ramas (branches)

# Ver ramas disponibles
git branch

# Crear y cambiar a una rama nueva
git checkout -b feature/login-cms
# o con la sintaxis moderna:
git switch -c feature/login-cms

# Trabajar en la rama...
# (editar archivos, git add, git commit)

# Ver diferencias entre ramas
git diff main feature/login-cms

# Fusionar la rama con main cuando está lista
git checkout main
git merge feature/login-cms

# Eliminar la rama después de fusionar
git branch -d feature/login-cms

Trabajar con GitHub (remoto)

# Conectar repositorio local con GitHub
git remote add origin https://github.com/usuario/mi-proyecto.git

# Subir código al repositorio remoto
git push -u origin main       # primera vez (-u configura el upstream)
git push                      # las siguientes veces

# Descargar cambios del repositorio remoto
git pull

# Descargar sin fusionar automáticamente
git fetch origin

Resolver conflictos

# Cuando dos personas editan el mismo archivo, Git marca el conflicto:

<<<<<<< HEAD
# Tu versión local
$color_primario = "#06357a";
=======
# Versión del compañero
$color_primario = "#0055a5";
>>>>>>> feature/nueva-paleta

# Editar el archivo manualmente, elegir una versión o combinarlas
# Luego:
git add archivo-conflictivo.php
git commit -m "Resolver conflicto en colores"

Comandos que salvan vidas

# Deshacer cambios en un archivo antes de hacer commit
git checkout -- archivo.php
# o moderno:
git restore archivo.php

# Sacar un archivo del staging (sin perder los cambios)
git restore --staged archivo.php

# Ver qué cambió exactamente
git diff                     # cambios sin stagear
git diff --staged            # cambios en staging vs último commit

# Guardar cambios temporalmente (sin commitear)
git stash
git stash pop                # recuperarlos después

# Ver quién modificó cada línea de un archivo
git blame archivo.php
✅ Buenos commits: un commit = un cambio lógico · mensaje en imperativo presente ("Agregar validación", no "Agregué validación") · nunca commitear credenciales (.env en .gitignore siempre) · commits pequeños y frecuentes, no un commit enorme al final del día
"Git no es perfectamente intuitivo al principio — pero es la herramienta que más tiempo te ahorará en toda tu carrera como desarrollador."