Mastodon
Ir al contenido

Comandos importantes de GIT

·1359 palabras·7 mins
Tabla de contenido

Este resumen se basa en los conceptos y comandos más importantes y utilizados del libro “Aprendiendo Git”.

I. Conceptos Fundamentales
#

1. El Sistema de Control de Versiones
#

  • Definición: Un Control de Versiones es un sistema que registra cada cambio en el código fuente de un proyecto. Esto permite mantener un histórico de quién hizo qué y cuándo.
  • Importancia: Funciona como un sistema de copias de seguridad avanzado, facilitando la colaboración y la sincronización de código entre desarrolladores.
  • Git: Es un sistema distribuido de control de versiones gratuito. Al ser distribuido, cada máquina local aloja una copia completa del repositorio.
  • Repositorio: Es la carpeta que almacena las versiones y el historial de cambios. Los repositorios pueden ser locales o remotos (en un servidor externo, como GitHub).
  • Git vs. GitHub: Git es la tecnología (el sistema de control de versiones). GitHub es un servicio de alojamiento en la nube de código fuente basado en Git, que proporciona funcionalidades adicionales (UI, Actions, etc.).

2. Los Tres Estados Cruciales
#

Los archivos de un proyecto pasan por tres estados principales durante su ciclo de vida en Git:

Estado Descripción Ubicación Principal Acción para avanzar
Modificado (Modified) El archivo contiene cambios, pero no han sido marcados para ser guardados. Directorio de trabajo git add
Preparado (Staged) Los archivos están listos para ser confirmados en el repositorio local. Es un área temporal transitoria. Área de Staging git commit
Confirmado (Committed) El archivo ha sido grabado en el repositorio local. Repositorio local git push (al remoto)

II. Configuración y Comandos Locales Esenciales
#

Configuración (Comandos Clave)
#

Antes de empezar, es esencial configurar la identidad para que los commits tengan la autoría correcta:

  • Nombre de usuario: git config --global user.name "<tu nombre>"
  • Correo electrónico: git config --global user.email "<tu email>"
  • Editor por defecto: Si no quieres usar vim, puedes configurar otro editor, como Visual Studio Code: git config --global core.editor "code".

Comandos de Desarrollo Local
#

Acción Comando Principal Descripción
Inicializar git init Crea un repositorio local en el directorio actual.
Ver estado git status / git status -s Muestra el estado de los archivos (modificado, preparado, sin rastrear). -s ofrece un formato corto y limpio.
Añadir a Staging git add <archivo> o git add . Mueve archivos del estado modificado a preparado (staging).
Confirmar (Commit) git commit -m "Mensaje" Graba los cambios del área de staging en el repositorio local.
Commit y saltar Staging git commit -am "Mensaje" Crea un commit incluyendo automáticamente todos los archivos modificados y ya rastreados (no funciona con archivos nuevos).
Ignorar Archivos Crear archivo .gitignore Lista archivos/directorios que Git debe ignorar (ej., /node_modules, archivos de configuración).
Deshacer modificación git restore <archivo> Deshace los cambios locales, restaurando la versión previa al estado modificado (solo en archivos ya rastreados).
Sacar de Staging git reset <archivo> Mueve un archivo de preparado de vuelta a modificado.

Deshaciendo Cambios Locales
#

  • Deshacer el último commit (manteniendo los cambios): Los cambios vuelven a ser archivos locales, listos para ser commiteados de nuevo. git reset --soft HEAD~1
  • Deshacer el último commit (eliminando los cambios): ¡Peligroso! Elimina permanentemente los cambios del repositorio y del directorio de trabajo. git reset --hard HEAD~1
  • Corregir el último commit (sin publicar): Modifica el mensaje anterior o añade más archivos. git commit --amend -m "Nuevo mensaje"

III. Ramas (Branches)
#

Ramas y HEAD
#

  • Ramas: Son versiones del repositorio que permiten el trabajo en paralelo, aislando el desarrollo de una característica o corrección.
  • Rama Principal: Tradicionalmente master, actualmente se recomienda main.
  • HEAD: Es el puntero que indica el punto actual del historial de cambios en el que se está trabajando.
Acción Comando Principal Descripción
Listar ramas git branch Muestra las ramas locales disponibles.
Crear y cambiar git switch -c <rama> Crea una rama nueva y se mueve a ella.
Cambiar de rama git switch <rama> / git switch - Se mueve a una rama existente. - permite volver a la rama anterior.
Eliminar rama git branch -d <rama> Eliminación segura (solo si ya ha sido fusionada).
Eliminar forzada git branch -D <rama> Eliminación forzada (incluso si no ha sido fusionada).

Fusionando Ramas (Merge vs. Rebase)
#

Concepto Merge (git merge) Rebase (git rebase)
Propósito Combina historiales, integrando cambios en un nuevo merge commit. Reescritura del historial: mueve commits de una rama y los aplica sobre otra base, creando un historial lineal y limpio.
Historial Conserva el historial real (visión de bifurcaciones). Crea una historia limpia y lineal, pero artificial.
Modo Común Fast-forward (si es posible) o Merge Commit (si hay divergencia). Aplica commits uno por uno sobre la base.
Regla de Oro Usar para integrar cambios en ramas principales (públicas). Nunca usar en ramas que ya han sido compartidas públicamente.
Conflictos Ocurren una vez, durante la fusión. Ocurren secuencialmente, commit por commit, durante la reescritura.

Resolución de Conflictos: Los conflictos ocurren cuando Git no puede determinar qué cambio debe prevalecer. Se resuelven manualmente, luego se marca la resolución con git add <archivo> y se finaliza con git commit.

IV. Trabajo Remoto y Sincronización
#

Los repositorios remotos (ej., GitHub) sirven como punto de sincronización.

Acción Comando Principal Descripción
Clonar git clone <dirección> Crea una copia exacta de todo el historial y ramas del repositorio remoto.
Clonación superficial git clone --depth=1 <repo> Clona solo el último commit, ideal para repositorios grandes o procesos CI/CD rápidos.
Enlazar remoto git remote add origin <dirección> Conecta un repositorio local existente con un repositorio remoto, usando origin como alias.
Traer cambios git pull origin main Descarga e integra los cambios del remoto (origin) a la rama local (main).
Enviar cambios git push origin main Sube los commits locales a la rama remota.

Push Rechazado: Si git push es rechazado, es porque el repositorio local no está sincronizado con el remoto (se quedó “atrás”). La solución es integrar primero los cambios remotos con git pull.

V. Buenas Prácticas y Estrategias
#

Buenas Prácticas de Commits y Ramas
#

  1. Frecuencia de Commit: Hacer commits a menudo y que sean pequeños, agrupando acciones que tengan un significado completo.
  2. Mensajes de Commit:
    • Usar el verbo imperativo (ej., Add, Fix, Change).
    • Máximo 50 caracteres para la línea de resumen, sin punto final.
    • Usar prefijos semánticos (ej., feat: para nueva funcionalidad, fix: para error, docs: para documentación).
  3. Nombre de Rama: Ser consistente (minúsculas, guiones) y descriptivo (ej., feature/, bug/). Es recomendable usar IDs de tickets para asegurar la unicidad (ej., 1234-feature/nombre).
  4. Pull Requests (PR): Deben estar enfocadas en una sola cosa. Es crucial explicar la PR (título, descripción, y si es posible, imágenes/GIFs).

Flujos de Trabajo Comunes
#

  • Git Flow: Estrategia estructurada que utiliza dos ramas principales (main para producción, develop para pre-producción) y tres ramas temporales de apoyo (Feature, Release, Hotfix). Ideal para productos con fuerte versionado.
  • GitHub Flow: Estrategia simple con una rama principal (main) que siempre debe ser desplegable, utilizando ramas cortas de funcionalidad que se integran a través de Pull Requests.
  • Trunk Based Development (TBD): Se enfoca en una única rama principal (trunk o main) con commits continuos y pequeños. Las ramas auxiliares tienen una vida muy corta. Requiere un fuerte sistema de Integración Continua (CI/CD).

VI. Herramientas Avanzadas y Trucos
#

Stash (Almacén Temporal)
#

  • Guardar cambios: Almacena temporalmente cambios (modified o staged) para permitir cambiar de rama sin hacer commit. git stash
  • Guardar archivos no rastreados: Para incluir archivos nuevos (untracked) en el stash. git stash -u
  • Recuperar y eliminar: Aplica el último stash y lo elimina de la pila. git stash pop

Utilidades y Trucos
#

  • Copiar Commit: Aplica los cambios de un commit específico de cualquier rama a la rama actual. git cherry-pick <commit-sha>
  • Alias: Crea atajos para comandos largos o complejos. git config --global alias.st "status -s"
  • Buscar autor/cambios en archivo: Muestra por línea quién hizo el último cambio en un archivo. git blame <fichero>
  • Autocorrección: Configura Git para que ejecute automáticamente comandos mal escritos después de un breve retraso (el valor se mide en décimas de segundo). git config --global help.autocorrect 20 (Espera 2.0 segundos)
  • GitHub CLI (gh): Una línea de comandos que permite interactuar con repositorios remotos de GitHub, útil para revisar Pull Requests o Issues sin salir de la terminal. gh pr checkout <PR_number> (Descarga una PR localmente para probarla).