Git

``

Contexto y ecosistema

Buenas prácticas y advertencias

  • Evitar force push que borre o reescriba el historial compartido
  • Preferir operaciones reversibles y trazables
    • Rollback en lugar de reescritura
    • Mantener el historial como fuente de auditoría

Volver atrás en el historial

  • Usar rollback para regresar a un estado anterior sin perder trazabilidad
  • Comandos y estrategias
    • git log para identificar commits
    • Revertir cambios en orden inverso (reverse)
  • Casos de uso
    • Deshacer un commit en producción
    • Corregir errores sin romper el historial compartido

Gestión del repositorio

Cambiar nombre de un repositorio

  • Referencia
    • git - How do I rename a repository on GitHub- - Stack Overflow
  • Actualizar el remoto tras el cambio
git remote set-url origin new_url

`

Ramas, PRs y revisión de cambios

  • Gestión de ramas orientada a revisión continua
  • Pull Requests como punto central de:
    • Code review
    • Checks automáticos
    • Discusión técnica

Estrategias de branching

  • GitFlow
    • Considerado desactualizado para equipos modernos
    • Alto coste de coordinación
    • Referencias
    • GitFlow ¿Qué és y cómo aplicarlo sin morir en el intento » GFourmis-
    • Git Flow y estrategias de branching Optimizando el desarrollo de software-git-flow-que-es
  • Enfoque moderno
    • Integración continua
    • Ramas de vida corta
    • Merge frecuente a main
    • Relación directa con CICD

      Feature branches

  • Ramas enfocadas a una única funcionalidad
  • Facilitan:
    • Revisión aislada
    • Reversión selectiva
  • Referencia
  • Feature Branch A Quick Walk Through Git Workflow-

    Integración continua y automatización

  • Uso de pipelines CI/CD
  • Validaciones automáticas en PR
  • Hooks locales con husky
    • Lint
    • Tests
    • Formateo

Documentación y aprendizaje

  • Aprende Git de manera sencilla. Capítulo 6 Deshaciendo y modificando commits-
  • Aprende Git de manera sencilla. Capítulo 8 Tags-
  • Aprende Git de manera sencilla. Capítulo 10 Git Alias-

Visualización y tooling

  • Extensión Git Graph de VS Code
    • Visualización clara del historial
    • Comparación entre ramas
    • Análisis de merges y conflictos

Gitignore y control de archivos

  • Uso correcto de .gitignore
    • Evitar subir artefactos generados
  • Cheatsheet
    • kenmuellergitignore .gitignore cheat sheet-gitignore

Ignorar archivos ya versionados

  • Caso común: carpeta ya comiteada
  • Solución usando caché
    • git ignorar carpeta ya comiteada con cached

Operaciones avanzadas entre ramas

  • Mover archivos entre ramas
    • mover archivos de main a rama dev
  • Igualar una rama a otra
    • Reset controlado
    • Uso frecuente en hotfixes
    • hacer que una rama sea identica a otra

Flujo de cambios avanzados

  • Stacked diffs
    • División de cambios grandes en commits pequeños y dependientes
    • Facilita revisión incremental
    • Muy usado en equipos con alta cadencia de cambios

git-Desde Cero

  • [Git y Github Curso Práctico de Git y Github Desde Cero](https://www.youtube.com/watch?v=HiXLkL42tMU)
  • snapshots
  • estados:
    • working directory
    • staging area
    • repository
  • Basic comands
    • git init
    • git add <file>
    • git status
    • git commit // primer snapshot
    • git push // repositorio remoto
    • git pull // trae los cambios
    • git clone // copia
    • al instalar poner la conf de git y BASH
    • configurar usuario en git:
    • git config --global user.email "deveduar@gmail.com"
    • git config --global user.name "devedu"
    • Hashes para diferenciar versiones
    • git log
    • Retroceder los cambios
    • git checkout -- <File>
    • ver diferencias entre cambios
    • git diff <file>
    • añadir el archivo para actualizar cambios
    • git add index.html
    • para guardar cambios
    • git commit
    • Ejemplo
    • git add .gitignore
    • git status
    • git commit -m "he agregado un .gitignore"
  • version alternativa del proyecto
    • master y login
    • git branh
    • git branch login
    • Todos los archivos: git add .
    • git -m "version alternatica con un login"
    • git checkout master para cambiar a la rama master
  • Github crear repositorio
    • git remote add origin <url>
    • git push -w origin master
    • Añadir ReadMe en marcdown

      github-subir un proyecto

      1. git init
      2. git add .
      3. git add <nombre del archivo>
      4. git commit -m "Mensaje del commit"
      5. git remote add origin https://github.com/deveduar/web-with-animations.git
      6. git push -u origin main
      7. git push
      8. Crea un repositorio en GitHub:
    • Inicia sesión en GitHub y crea un nuevo repositorio con nombre y descripción.
    • Establece la visibilidad (público o privado) y crea el repositorio vacío.
      1. Inicializa Git en tu proyecto:
    • Abre una terminal y navega hasta la carpeta raíz del proyecto.
    • Ejecuta git init para inicializar Git.
      1. Agrega archivos al repositorio:
    • Utiliza git add . para agregar todos los cambios pendientes al área de preparación.
    • Puedes usar git add <nombre del archivo> para agregar archivos específicos.
      1. Realiza un commit de los cambios:
    • Ejecuta git commit -m "Mensaje del commit" con un mensaje descriptivo.
      1. Conecta tu repositorio local con GitHub:
    • Agrega la dirección remota de GitHub con git remote add origin <dirección del repositorio de GitHub>.
      1. Sube los cambios a GitHub:
    • Utiliza git push -u origin main para subir los cambios a la rama “main” en GitHub.
      1. Verifica en GitHub

git instalacion y docs for windows

  • instalacion - branch names - master por default
  • Open SSH
  • Open SSL* o Windows secure, HTTPS conections
  • Use the winget tool to install and manage applications
  • winget install --id Git.Git -e --source winget
  • Mintty
  • Git Credential Manager
  • al instalar marcar Enable file system caching
  • Git 2.5

    GitHub habilidades

  • Creación y gestión de repositorios: Capacidad para crear y administrar repositorios en GitHub, incluyendo la configuración de opciones de privacidad, colaboradores y permisos.
  • Control de versiones: Uso efectivo de Git y GitHub para controlar y gestionar cambios en el código fuente, incluyendo la creación de ramas (branches), fusiones (merges) y resolución de conflictos.
  • Colaboración y trabajo en equipo: Experiencia en colaborar con otros desarrolladores en proyectos compartidos, utilizando características como solicitudes de extracción (pull requests) y revisión de código (code review).
  • Gestión de problemas y seguimiento de proyectos: Utilización de las funciones de gestión de problemas (issues) en GitHub para rastrear y solucionar problemas, asignar tareas y realizar un seguimiento del progreso del proyecto.
  • Despliegue continuo (Continuous Deployment): Integración con servicios de despliegue continuo (CI/CD) como GitHub Actions o integración con servicios externos como Travis CI o Jenkins para automatizar el proceso de compilación, pruebas y despliegue del código.
  • Uso de GitHub Pages: Publicación de sitios web estáticos o documentación utilizando GitHub Pages, aprovechando su integración nativa con los repositorios de GitHub.
  • Exploración y descubrimiento de proyectos: Habilidad para buscar, explorar y contribuir a proyectos de código abierto en GitHub, utilizando herramientas como etiquetas (tags) y búsqueda avanzada.
  • Gestión de ramas y versiones: Conocimiento de las mejores prácticas para gestionar y organizar ramas de desarrollo, como la utilización de ramas principales (main/master) y ramas de características (feature branches), así como la aplicación de etiquetas (tags) para marcar versiones estables.
  • Configuración de integraciones: Conexión de repositorios de GitHub con otras herramientas y servicios, como Slack, Trello o sistemas de seguimiento de problemas (issue trackers), para mejorar la colaboración y la eficiencia del flujo de trabajo.
  • Administración de archivos y carpetas: Organización adecuada de archivos y carpetas en un repositorio de GitHub, siguiendo las convenciones y mejores prácticas de estructura de proyectos.
  • Gestión de secretos: Uso de la función de secretos en GitHub para almacenar y gestionar de manera segura información confidencial, como claves de API o tokens de acceso.

Consideraciones al crear una nueva branch:

  1. Propósito claro: Define si es para una nueva funcionalidad o corrección.
  2. Basarse en la rama correcta: Usualmente main o develop.
    1. git checkout main git pull origin main git checkout -b feature/nueva-funcionalidad
  3. Convención de nombres: Usa feature/, bugfix/, hotfix/, etc.
  4. Sincronización regular: Actualiza con la rama principal.
    1. git fetch origin git merge origin/main
  5. Eliminar branches obsoletas: Después de fusionar.
    1. git branch -d feature/nueva-funcionalidad git push origin --delete feature/nueva-funcionalidad

Git – Conceptos avanzados y temas complementarios

Integridad del historial

  • Diferencia conceptual entre merge y rebase
    • Merge conserva la topología real del historial
    • Rebase reescribe commits para un historial lineal
  • Cuándo usar cada uno
    • Merge en ramas compartidas
    • Rebase en ramas locales antes de abrir PR
  • Riesgos del rebase en ramas públicas

Selección y reaplicación de cambios

  • Cherry-pick
    • Aplicar commits específicos sin fusionar ramas completas
    • Útil para hotfixes puntuales
    • Riesgo de duplicar cambios si no se documenta bien

Depuración y análisis de errores

  • git bisect
    • Búsqueda binaria del commit que introdujo un bug
    • Integrable con scripts de test automáticos
  • git blame
    • Contexto histórico de líneas de código
    • Uso responsable (entender decisiones, no señalar culpables)

Recuperación y seguridad local

  • git reflog
    • Registro local de movimientos de HEAD
    • Recuperación tras resets o rebases erróneos
  • git stash
    • Guardado temporal de cambios incompletos
    • Uso con múltiples stashes y mensajes descriptivos

Gestión de múltiples contextos de trabajo

  • git worktree
    • Varias ramas activas en directorios separados
    • Ideal para:
      • Revisar PRs
      • Hotfixes paralelos
  • Evita cambios constantes de rama en el mismo working tree

Optimización para repositorios grandes

  • Sparse checkout
    • Trabajar solo con parte del repositorio
    • Útil en monorepos grandes
  • Git LFS
    • Manejo de archivos binarios pesados
    • Evita inflar el historial

Versionado semántico y entregables

  • Tags
    • Tags ligeros vs anotados
    • Relación con releases
  • Convenciones
    • Semantic Versioning
    • Automatización de versiones desde CI

Subrepositorios y dependencias

  • Submodules
    • Referencia a commits exactos de otros repos
    • Mayor control, mayor complejidad
  • Subtree
    • Código integrado directamente en el historial
    • Menos fricción para equipos pequeños

Calidad de commits

  • Commits pequeños y coherentes
  • Mensajes claros
    • Línea corta + descripción opcional
    • Convenciones tipo Conventional Commits
  • Separación entre:
    • Cambios funcionales
    • Refactors
    • Formateo

Seguridad y confianza

  • Commit signing
    • GPG / SSH
    • Verificación de autoría
  • Protección de ramas
    • Reglas en main/master
    • Requerir PR y checks pasados

Configuración avanzada

  • Git config por niveles
    • Sistema
    • Global
    • Repositorio
  • Alias avanzados
    • Flujos de trabajo repetitivos
    • Comandos compuestos

Colaboración a gran escala

  • Escalado de revisiones
    • PRs pequeños y frecuentes
    • Revisiones asíncronas
  • Políticas de merge
    • Squash
    • Rebase & merge
    • Merge commit
  • Impacto en trazabilidad y auditoría

Git como base del SDLC

  • Fuente de verdad del cambio
  • Integración con:
    • Issue tracking
    • CI/CD
    • Auditoría y compliance
  • Relación directa con métricas de entrega
    • Lead time
    • Change failure rate

Recursos Git actualizados a 2025 (estado a 2025)

Documentación oficial y guías completas

  • Aprende Git de manera sencilla. Capítulo 6 Deshaciendo y modificando commits-
  • Aprende Git de manera sencilla. Capítulo 8 Tags-
  • Aprende Git de manera sencilla. Capítulo 10 Git Alias-
  • Resumen de comandos y conceptos esenciales (gist, 2025) – Comandos clave y flujo diario en Git y GitHub con stashing, merge, rebase, reflog, pull requests, etiquetas, alias y más. gist
  • Guía profesional de Git actualizada (gist 2025) – guía rápida con buenas prácticas y flujos de trabajo modernos. gist

Estrategias de branching y flujos de trabajo

  • Flujo de trabajo de ramas de función – explica cómo aislar desarrollo de funciones y gestionar pull requests para colaborar eficientemente. atlassian
  • Comparación de flujos de trabajo de Git – visión general y fundamentos para elegir un flujo de trabajo adecuado según tu equipo. atlassian
  • Gitflow en 2025 – guía reciente sobre Gitflow, su estructura y cuándo sigue siendo relevante versus enfoques más modernos. atlassian
  • Estrategias avanzadas para proyectos complejos – prácticas y ejemplos de manejo de múltiples ramas y sincronización con la rama principal en proyectos grandes. graphite
  • DevOps Roadmap — Git & version control (2025) – guía integral en Medium sobre branching, merge vs rebase, stash y workflows para DevOps. medium
  • Estrategia de ramificación para entornos DevOps con múltiples cuentas – enfoque AWS para elegir entre GitHub Flow, GitFlow o trunk-based según objetivos de DevOps. AWS Docs

GitHub y colaboración

  • Diferencias entre Git y GitHub (2025) – explicación actualizada sobre cómo usar Git localmente y sincronizar con GitHub para colaboración y control de versiones. imaginaformacion
  • Tutorial de CI/CD con GitHub y Azure Deployment Environments – integración de ramas, PR y despliegues automatizados con CI/CD usando GitHub Actions y Azure. Microsoft Learn
  • Guide de colaboración y pull requests con ejemplos de terminal – guía práctica para gestionar ramas, PRs, revisiones y merges en equipo (2025). owais.io

Cursos, talleres y eventos 2025

  • El curso definitivo de Git y GitHub 2025 – curso actualizado que cubre desde lo básico hasta GitHub moderno. Skillshare
  • Workshop sobre Git/GitHub 2025 – evento práctico con ejercicios de repositorios, ramas y PRs. eveliacoss.github.io
  • Git 101 2025 (seminario presencial) – introducción a Git, colaboración y flujos CI/CD actualizados para desarrollo profesional. codelabzgz.dev

Recursos experimentales y académicos (2025)

  • Granite: seguridad granular para permisos de GitHub Actions – investigación sobre control de permisos más fino en CI/CD para seguridad de workflows. arxiv
  • GITER: modelo declarativo con Git inspirado en Kubernetes Custom Resources – propuesta avanzada de uso de Git para coordinación distribuida. arxiv
  • Impacto ambiental de pipelines CI/CD – análisis del impacto de uso intensivo de acciones CI/CD en huella de carbono y agua. arxiv

Cheatsheets y aprendizaje rápido

  • Comandos esenciales y buenas prácticas (incluye stash, reflog, merge, reset) – resumido en gist práctico. gist
  • Community-driven cheat tips y trucos comentados por desarrolladores Git (reddit posts 2025) – comandos útiles para recuperación y bug hunt. reddit