Introducción a Git

Git es el sistema de control de versiones más utilizado en el mundo. En este tutorial aprenderás desde los conceptos básicos hasta técnicas avanzadas.

Configuración Inicial

Antes de comenzar, configura tu identidad:

1
2
3
4
5
6
7
8
9
# Configurar nombre y email
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"

# Configurar editor por defecto
git config --global core.editor "code --wait"

# Ver configuración actual
git config --list

Comandos Básicos

Inicializar un Repositorio

1
2
3
4
5
6
# Crear nuevo repositorio
git init mi-proyecto
cd mi-proyecto

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

El Flujo de Trabajo

El flujo básico de Git consiste en tres áreas:

  1. Working Directory - Donde editas tus archivos
  2. Staging Area - Donde preparas los cambios
  3. Repository - Donde se guardan los commits
1
2
3
4
5
6
7
8
9
10
11
12
# Ver estado actual
git status

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

# Crear un commit
git commit -m "feat: agregar nueva funcionalidad"

# Ver historial
git log --oneline --graph

Branching

Las ramas son una de las características más poderosas de Git:

1
2
3
4
5
6
7
8
9
10
11
# Crear nueva rama
git branch feature/nueva-funcionalidad

# Cambiar de rama
git checkout feature/nueva-funcionalidad

# Crear y cambiar en un solo comando
git checkout -b feature/otra-funcionalidad

# Listar ramas
git branch -a

Estrategias de Merge

1
2
3
4
5
6
7
8
9
10
# Merge básico
git checkout main
git merge feature/nueva-funcionalidad

# Merge con squash (combina commits)
git merge --squash feature/branch

# Rebase (reescribe historial)
git checkout feature/branch
git rebase main
Nunca hagas rebase en ramas públicas que otros estén usando. Puede causar conflictos graves.

Trabajando con Remotos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Ver remotos configurados
git remote -v

# Agregar remoto
git remote add origin https://github.com/user/repo.git

# Subir cambios
git push origin main

# Traer cambios
git pull origin main

# Fetch sin merge
git fetch origin

Comandos Avanzados

Stash - Guardar cambios temporalmente

1
2
3
4
5
6
7
8
9
10
11
# Guardar cambios
git stash

# Listar stashes
git stash list

# Aplicar último stash
git stash pop

# Aplicar stash específico
git stash apply stash@{2}

Cherry-pick - Traer commits específicos

1
2
# Traer un commit específico a la rama actual
git cherry-pick abc123

Reset vs Revert

1
2
3
4
5
6
# Reset - Elimina commits (peligroso en ramas públicas)
git reset --soft HEAD~1   # Mantiene cambios en staging
git reset --hard HEAD~1   # Elimina todo

# Revert - Crea nuevo commit que deshace cambios (seguro)
git revert abc123

Alias Útiles

Agrega estos alias a tu .gitconfig:

1
2
3
4
5
6
7
8
9
[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    lg = log --oneline --graph --all
    unstage = reset HEAD --
    last = log -1 HEAD
    visual = !gitk

Git Hooks

Automatiza tareas con hooks:

1
2
3
4
# .git/hooks/pre-commit
#!/bin/sh
npm run lint
npm test

Buenas Prácticas

Conventional Commits

Usa un formato consistente para tus mensajes:

1
2
3
4
5
<tipo>[scope opcional]: <descripción>

[cuerpo opcional]

[footer opcional]

Tipos comunes:

Ejemplo

1
2
3
4
5
6
7
git commit -m "feat(auth): agregar autenticación con OAuth2

- Implementar flujo de OAuth2
- Agregar refresh token
- Crear middleware de autenticación

Closes #123"

Conclusión

Git es una herramienta fundamental para cualquier desarrollador. Dominar estos comandos te hará más productivo y te permitirá colaborar efectivamente en equipos.

Practica estos comandos en un repositorio de prueba antes de usarlos en proyectos reales.