Fundamentos Esenciales de Git: Conceptos Clave para el Control de Versiones Distribuido
Clasificado en Informática
Escrito el en
español con un tamaño de 6,26 KB
Conceptos Fundamentales de Git y Repositorios
Git
Sistema de control de versiones distribuido. Guarda cada cambio realizado en el proyecto y permite a los desarrolladores colaborar sin necesidad de una conexión constante.
Recomendación: Utiliza ramas (branches) y pull requests (PR) para gestionar y organizar el trabajo en equipo de manera eficiente.
Repositorio Remoto
Versión central del proyecto almacenada en línea (por ejemplo, en plataformas como GitHub, GitLab o Bitbucket).
Convención: Generalmente, se usa origin para referirse a tu copia personal en el servidor, y upstream para el repositorio original del que derivas.
Repositorio Local
Tu copia completa del proyecto en tu ordenador. Incluye el historial completo de cambios, el índice (staging area) y los archivos de trabajo.
Ventaja: Es útil y necesario para trabajar sin conexión a internet.
Espacio de Trabajo (Working Directory)
Carpeta o directorio donde editas y modificas el código fuente del proyecto.
Consejo: Evita mantener archivos innecesarios o temporales en esta carpeta para no incluirlos accidentalmente en tus commits.
Gestión de Cambios: Commit, Índice y Transferencia
Índice (Staging Area)
Zona intermedia donde seleccionas y preparas los cambios específicos que deseas incluir en el próximo commit.
Flexibilidad: Puedes añadir solo partes o fragmentos de un archivo modificado, no necesariamente el archivo completo.
Commit
Punto de guardado atómico que encapsula un conjunto de cambios, acompañado de un mensaje descriptivo y la información del autor.
Práctica recomendada: Realiza commits pequeños y enfocados en un único propósito o funcionalidad.
Push
Operación que envía tus commits locales al repositorio remoto, haciéndolos accesibles para el resto del equipo.
Sugerencia: Usa --set-upstream (o -u) la primera vez que subas una rama nueva para establecer el seguimiento.
Fetch
Descarga los últimos cambios y referencias del repositorio remoto sin integrarlos (mezclarlos) en tu rama de trabajo local.
Hábito: Ejecútalo frecuentemente para ver qué hay de nuevo en el repositorio sin modificar tu trabajo actual.
Pull
Combina las operaciones de fetch y merge (o rebase). Trae los cambios remotos y los aplica a tu rama local.
Diferencia clave: Usar rebase resulta en una historia lineal y limpia. Usar merge es más fiel al orden cronológico real de los eventos.
Integración y Limpieza del Historial
Merge
Proceso de unir dos ramas de desarrollo. Puede crear un commit de fusión (merge commit) si no es un avance rápido (fast-forward).
Prevención de Conflictos: Haz merges frecuentes para evitar la acumulación de conflictos grandes y complejos.
Rebase
Reordena una serie de commits, aplicándolos secuencialmente como si hubieran sido creados después de la rama base.
Advertencia: No uses rebase sobre ramas que ya han sido publicadas o compartidas sin avisar a tu equipo, ya que reescribe el historial.
Rebase Interactivo (git rebase -i)
Herramienta avanzada que permite editar, reordenar, eliminar o unir (squash) commits dentro de un rango específico.
Uso: Limpia y organiza tu historial de commits antes de realizar un push a una rama pública.
Squash
Acción de consolidar varios commits pequeños o triviales en uno solo, manteniendo la atomicidad del cambio.
Beneficio: Es útil para limpiar commits intermedios antes de hacer un merge a la rama principal.
Merge Squash
Tipo de fusión que toma todos los commits de la rama fuente y los aplica como un único commit en la rama destino.
Ideal para: Mantener la rama principal (main o master) con un historial limpio y de alto nivel, sin registrar cada commit intermedio de la rama de característica.
Operaciones Avanzadas y Control de Estado
Checkout
Comando utilizado para cambiar de rama o para recuperar el estado de archivos a una versión anterior específica.
Precaución: Guarda tu trabajo (mediante commit o stash) antes de hacer checkout para evitar perder avances.
Ramas Privadas y Públicas
Privada: Una rama que existe solo en tu repositorio local (PC). Pública: Una rama que ha sido subida al servidor remoto.
Recomendación de Flujo: No trabajes mucho tiempo en privado; comparte tu progreso (haz push) pronto para facilitar la colaboración y las copias de seguridad.
Reset
Comando que permite mover el puntero de la rama a un estado anterior, lo que potencialmente puede descartar o borrar cambios.
Modos: Existen tres modos principales: Soft (mantiene cambios en el índice), Mixed (mueve cambios al espacio de trabajo) y Hard (elimina cambios). ¡Se debe tener extremo cuidado con el modo Hard!
Stash
Mecanismo para guardar temporalmente los cambios que tienes en el espacio de trabajo y en el índice sin necesidad de crear un commit.
Utilidad: Es indispensable para cambiar rápidamente de rama sin perder el progreso que aún no está listo para ser guardado permanentemente.
Pull Request (PR)
Solicitud formal enviada al repositorio remoto para que los cambios realizados en una rama sean revisados, discutidos e incorporados a la rama principal (o destino).
Calidad del PR: Debe incluir una descripción clara, evidencia de pruebas realizadas y enlaces a los tickets o tareas relacionadas.