Software engineering
Git
``
Contexto y ecosistema
- Software engineering
- monorepo
- git hooks
- github actions
- husky
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 logpara 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 initgit add <file>git statusgit commit// primer snapshotgit push// repositorio remotogit pull// trae los cambiosgit 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 .gitignoregit statusgit commit -m "he agregado un .gitignore"
- version alternativa del proyecto
- master y login
git branhgit branch login- Todos los archivos:
git add . git -m "version alternatica con un login"git checkout masterpara 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
git initgit add .git add <nombre del archivo>git commit -m "Mensaje del commit"git remote add origin https://github.com/deveduar/web-with-animations.gitgit push -u origin maingit push- 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.
- Inicializa Git en tu proyecto:
- Abre una terminal y navega hasta la carpeta raíz del proyecto.
- Ejecuta
git initpara inicializar Git.- 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.- Realiza un commit de los cambios:
- Ejecuta
git commit -m "Mensaje del commit"con un mensaje descriptivo.- Conecta tu repositorio local con GitHub:
- Agrega la dirección remota de GitHub con
git remote add origin <dirección del repositorio de GitHub>.- Sube los cambios a GitHub:
- Utiliza
git push -u origin mainpara subir los cambios a la rama “main” en GitHub.- 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:
- Propósito claro: Define si es para una nueva funcionalidad o corrección.
- Basarse en la rama correcta: Usualmente
mainodevelop.git checkout main git pull origin main git checkout -b feature/nueva-funcionalidad
- Convención de nombres: Usa
feature/,bugfix/,hotfix/, etc. - Sincronización regular: Actualiza con la rama principal.
git fetch origin git merge origin/main
- Eliminar branches obsoletas: Después de fusionar.
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
¿Te gusta este contenido? Suscríbete vía RSS