Flujo de Trabajo en Git
Antes de profundizar en comandos específicos, es importente entender los cuatro componentes principales del entorno de Git:
- Área de trabajo (Working Directory): Es donde se realizan las modificaciones y desarrollo.
- Índice o Área de preparación (Staging Area): Guarda temporalmente los cambios antes de confirmarlos.
- Repositorio local (Local Repository): Almacena todas las versiones confirmadas del proyecto.
- Repositorio remoto (Remote Repository): Copia centralizada accesible para colaboradores.
El ciclo básico funciona así: los archivos son creados o editados en el área de trabajo; luego se añaden al índice mediante git add; después se confirman con git commit, guardándose en el repositorio local; finalmente pueden enviarse al repositorio remoto usando git push.
Términos Clave
HEAD
HEAD apunta siempre al último commit de la rama actual. Cambia automáticamente cuando se hace un nuevo commit o se cambia de rama.
Añadir Cambios
# Añade todos los archivos modificados al índice
git add .
# Añade una carpeta específica incluyendo subdirectorios
git add [ruta]
# Añade solo ciertos archivos
git add [archivo1] [archivo2]
Confirmar Cambios
# Confirma los cambios en el índice con un mensaje descriptivo
git commit -m "Mensaje explicativo"
# Confirma solo algunos archivos del índice
git commit [archivo1] -m "Solo archivo1"
# Corrige el último commit sin crear uno nuevo
git commit --amend -m "Versión corregida"
Gestión de Ramas
# Muestra todas las ramas locales
git branch
# Lista ramas remotas
git branch -r
# Ver todas las ramas (locales y remotas)
git branch -a
# Crear nueva rama pero permanecer en la actual
git branch [nombre-rama]
# Crear y cambiar a una nueva rama
git checkout -b [nombre-rama]
# Establecer seguimiento entre rama local y remota
git branch --track [rama-local] [rama-remota]
# Cambiar a otra rama
git checkout [nombre-rama]
# Eliminar una rama local
git branch -d [nombre-rama]
# Borrar rama remota
git push origin --delete [nombre-rama]
Etiquetas en Git
Las etiquetas permiten marcar puntos específicos en la historia del proyecto, normalmente usadas para versiones estables.
# Listar todas las etiquetas existentes
git tag
# Filtrar etiquetas por patrón
git tag -l 'v2.*'
# Crear una etiqueta simple
git tag v2.0
# Etiqueta anotada con descripción
git tag -a v2.0 -m "Lanzamiento estable"
# Etiquetar un commit específico
git tag -a v1.5 [hash-commit] -m "Versión inicial"
# Mostrar información detallada de una etiqueta
git show v2.0
# Enviar una etiqueta al servidor remoto
git push origin v2.0
# Subir todas las etiquetas locales
git push origin --tags
# Eliminar una etiqueta local
git tag -d v2.0
# Quitar etiqueta del repositorio remoto
git push origin :refs/tags/v2.0
Comandos Avanzados
Fusionar Ramas
# Fusiona una rama especificada en la rama actual
git merge [nombre-rama]
Existen dos tipos de fusión:
- Fast-forward: Ocurre cuando no hay nuevos commits en la rama destino.
- No fast-forward: Se crea un nuevo commit de fusión aunque haya cambios en ambas ramas.
Reorganizar Historial
# Aplica los cambios de otra rama sobre la actual
git rebase [nombre-rama]
Durante el proceso de rebase, puedes elegir cómo tratar cada commit:
- reword: Editar mensaje del commit
- edit: Modificar contenido del commit
- squash: Combinar con el anterior manteniendo ambos mensajes
- fixup: Unir con el anterior ignorando su mensaje
- exec: Ejecutar comando personalizado
- drop: Descartar commit completamente
Restaurar Versiones Anteriores
# Restaurar manteniendo cambios en índice
git reset --soft [commit]
# Restaurar descartando todo lo posterior
git reset --hard [commit]
Invertir Cambios
# Crea un nuevo commit que revierte otro
git revert [commit]
Seleccionar Commits Específicos
# Trae commits específicos desde otra rama
git cherry-pick [hash-commit]
Sincronización con Repositorio Remoto
# Descarga cambios sin modificar el directorio de trabajo
git fetch origin
# Descarga e integra automáticamente los cambios
git pull origin [rama]
Historial de Operaciones
# Muestra registro completo de acciones recientes
git reflog
Puedes usar esta referencia para restaurar a estados anteriores mediante git reset utilizando cualquiera de los identificadores mostrados.