<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on Commentary of Takao</title><link>https://takao.blog/es/tags/git/</link><description>Recent content in Git on Commentary of Takao</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>Commentary of Takao</copyright><lastBuildDate>Sun, 12 Jul 2026 04:12:51 +0900</lastBuildDate><atom:link href="https://takao.blog/es/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Alias de Git: Productividad en la línea de comandos</title><link>https://takao.blog/es/web/git-alias-setup-productivity/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-alias-setup-productivity/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-alias-setup-productivity-es.png" alt="Featured image of post Alias de Git: Productividad en la línea de comandos" /&gt;&lt;p&gt;Los alias de Git permiten abreviar comandos largos. Configurados en &lt;code&gt;.gitconfig&lt;/code&gt;, pueden incluir secuencias completas y flags.&lt;/p&gt;
&lt;h2 id="alias-básicos"&gt;Alias básicos
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git config --global alias.co checkout&lt;/code&gt;, &lt;code&gt;alias.br branch&lt;/code&gt;, &lt;code&gt;alias.ci commit&lt;/code&gt;, &lt;code&gt;alias.st status&lt;/code&gt;. Los alias más comunes ahorran cientos de pulsaciones al día.&lt;/p&gt;
&lt;h2 id="alias-avanzados"&gt;Alias avanzados
&lt;/h2&gt;&lt;p&gt;Combinan múltiples comandos con &lt;code&gt;!&lt;/code&gt;: &lt;code&gt;alias.lg = !git log --graph --oneline --all&lt;/code&gt;. Ejecutan scripts shell arbitrarios.&lt;/p&gt;
&lt;h2 id="alias-con-parámetros"&gt;Alias con parámetros
&lt;/h2&gt;&lt;p&gt;Usando funciones shell en el alias: &lt;code&gt;!f() { git log --oneline --author=&amp;quot;$1&amp;quot;; }; f&lt;/code&gt;. Máximo control sin memorizar flags.&lt;/p&gt;</description></item><item><title>Firmado de commits con claves SSH</title><link>https://takao.blog/es/web/git-signing-commits-ssh-keys/</link><pubDate>Mon, 25 May 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-signing-commits-ssh-keys/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-signing-commits-ssh-keys-es.png" alt="Featured image of post Firmado de commits con claves SSH" /&gt;&lt;p&gt;Git 2.34+ permite firmar commits con claves SSH además de GPG. SSH es más familiar para desarrolladores que ya usan claves SSH para autenticación.&lt;/p&gt;
&lt;h2 id="configuración"&gt;Configuración
&lt;/h2&gt;&lt;p&gt;Usa tu clave SSH existente (&lt;code&gt;~/.ssh/id_ed25519.pub&lt;/code&gt;). Configura &lt;code&gt;git config --global gpg.format ssh&lt;/code&gt; y &lt;code&gt;user.signingkey ~/.ssh/id_ed25519.pub&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="firma-automática"&gt;Firma automática
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt; firma todos los commits. Git usa SSH agent para la frase de paso.&lt;/p&gt;
&lt;h2 id="registro-en-github"&gt;Registro en GitHub
&lt;/h2&gt;&lt;p&gt;Añade tu clave SSH pública en GitHub Settings con tipo &amp;ldquo;Signing Key&amp;rdquo; (no solo Authentication). Los commits firmados muestran &amp;ldquo;Verified&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Recuperación de ramas eliminadas con git reflog</title><link>https://takao.blog/es/web/git-recovery-deleted-branch-reflog/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-recovery-deleted-branch-reflog/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-recovery-deleted-branch-reflog-es.png" alt="Featured image of post Recuperación de ramas eliminadas con git reflog" /&gt;&lt;p&gt;&lt;code&gt;git reflog&lt;/code&gt; registra todos los movimientos de HEAD. Es la herramienta de rescate cuando eliminas una rama por accidente.&lt;/p&gt;
&lt;h2 id="cómo-funciona-reflog"&gt;Cómo funciona reflog
&lt;/h2&gt;&lt;p&gt;Cada cambio de HEAD (commit, checkout, reset, merge) se registra. &lt;code&gt;git reflog&lt;/code&gt; muestra el historial de movimientos con sus hashes.&lt;/p&gt;
&lt;h2 id="recuperar-una-rama-eliminada"&gt;Recuperar una rama eliminada
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Encuentra el último commit de la rama en reflog. 2. &lt;code&gt;git checkout -b rama-recuperada &amp;lt;hash&amp;gt;&lt;/code&gt;. La rama y sus commits están intactos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="límites-de-reflog"&gt;Límites de reflog
&lt;/h2&gt;&lt;p&gt;Reflog es local y temporal. Los commits huérfanos son recolectados por GC tras 90 días (default). Recupera pronto.&lt;/p&gt;</description></item><item><title>Git checkout, restore y switch: Diferencias y cuándo usar cada uno</title><link>https://takao.blog/es/web/git-checkout-restore-switch-commands/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-checkout-restore-switch-commands/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-checkout-restore-switch-commands-es.png" alt="Featured image of post Git checkout, restore y switch: Diferencias y cuándo usar cada uno" /&gt;&lt;p&gt;Git 2.23 introdujo &lt;code&gt;git switch&lt;/code&gt; y &lt;code&gt;git restore&lt;/code&gt; para reemplazar los usos sobrecargados de &lt;code&gt;git checkout&lt;/code&gt;. Cada comando tiene una responsabilidad única.&lt;/p&gt;
&lt;h2 id="git-switch"&gt;git switch
&lt;/h2&gt;&lt;p&gt;Cambia de rama. Equivalente a &lt;code&gt;git checkout &amp;lt;rama&amp;gt;&lt;/code&gt;. &lt;code&gt;-c&lt;/code&gt; crea y cambia a una nueva rama. &lt;code&gt;-&lt;/code&gt; vuelve a la rama anterior.&lt;/p&gt;
&lt;h2 id="git-restore"&gt;git restore
&lt;/h2&gt;&lt;p&gt;Restaura archivos del working tree o staging. &lt;code&gt;git restore archivo&lt;/code&gt; descarta cambios locales. &lt;code&gt;--staged&lt;/code&gt; quita archivos del staging.&lt;/p&gt;
&lt;h2 id="git-checkout-legacy"&gt;git checkout (legacy)
&lt;/h2&gt;&lt;p&gt;Aún funciona pero es sobrecargado. Puede cambiar ramas o restaurar archivos. Para scripts y automatización, prefiere switch y restore.&lt;/p&gt;</description></item><item><title>Git Merge vs Rebase: Mejores prácticas</title><link>https://takao.blog/es/web/git-merge-vs-rebase-best-practice/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-merge-vs-rebase-best-practice/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-merge-vs-rebase-best-practice-es.png" alt="Featured image of post Git Merge vs Rebase: Mejores prácticas" /&gt;&lt;p&gt;Merge y rebase son dos estrategias para integrar cambios. Cada una tiene ventajas según el contexto y la política del equipo.&lt;/p&gt;
&lt;h2 id="merge"&gt;Merge
&lt;/h2&gt;&lt;p&gt;Crea un commit de merge que preserva el historial exacto. Útil para ramas públicas y compartidas. Traza claramente cuándo y cómo se integraron los cambios.&lt;/p&gt;
&lt;h2 id="rebase"&gt;Rebase
&lt;/h2&gt;&lt;p&gt;Reescribe el historial aplicando commits de una rama sobre otra línea. Resulta en un historial lineal y limpio. No recomendado para ramas compartidas.&lt;/p&gt;</description></item><item><title>Commits semánticos: Estandarización de mensajes de commit</title><link>https://takao.blog/es/web/git-semantic-commit-messages-standard/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-semantic-commit-messages-standard/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-semantic-commit-messages-standard-es.png" alt="Featured image of post Commits semánticos: Estandarización de mensajes de commit" /&gt;&lt;p&gt;Los mensajes de commit semánticos siguen un formato estructurado que facilita la generación de changelogs y el versionado semántico automático.&lt;/p&gt;
&lt;h2 id="formato"&gt;Formato
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;tipo(alcance): descripción&lt;/code&gt; + cuerpo + footer. Tipos: &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;style&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;perf&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="beneficios"&gt;Beneficios
&lt;/h2&gt;&lt;p&gt;Generación automática de changelogs con herramientas como &lt;code&gt;standard-version&lt;/code&gt;. Versionado semántico: feat → minor, fix → patch, breaking changes → major.&lt;/p&gt;
&lt;h2 id="breaking-changes"&gt;Breaking changes
&lt;/h2&gt;&lt;p&gt;Añade &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; en el footer o &lt;code&gt;!&lt;/code&gt; después del tipo/alcance: &lt;code&gt;feat(api)!: rediseñar autenticación&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Limpieza de ramas remotas huérfanas con git prune</title><link>https://takao.blog/es/web/git-prune-clean-remote-branches/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-prune-clean-remote-branches/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-prune-clean-remote-branches-es.png" alt="Featured image of post Limpieza de ramas remotas huérfanas con git prune" /&gt;&lt;p&gt;Las ramas remotas eliminadas en el servidor pueden quedar como referencias locales obsoletas. &lt;code&gt;git remote prune&lt;/code&gt; y &lt;code&gt;git fetch --prune&lt;/code&gt; las eliminan.&lt;/p&gt;
&lt;h2 id="el-problema"&gt;El problema
&lt;/h2&gt;&lt;p&gt;Cuando un compañero elimina una rama remota, tu repositorio local aún conserva &lt;code&gt;origin/rama-eliminada&lt;/code&gt;. Con el tiempo se acumulan decenas de referencias muertas.&lt;/p&gt;
&lt;h2 id="soluciones"&gt;Soluciones
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git fetch --prune origin&lt;/code&gt; limpia al hacer fetch. &lt;code&gt;git remote prune origin&lt;/code&gt; limpia sin fetch. Configura &lt;code&gt;fetch.prune = true&lt;/code&gt; globalmente.&lt;/p&gt;
&lt;h2 id="ramas-locales-huérfanas"&gt;Ramas locales huérfanas
&lt;/h2&gt;&lt;p&gt;Usa &lt;code&gt;git branch --merged&lt;/code&gt; para encontrar ramas locales ya mergeadas. Elimínalas con &lt;code&gt;git branch -d&lt;/code&gt;. Combina con prun para limpieza completa.&lt;/p&gt;</description></item><item><title>Revertir merges en Git de forma segura</title><link>https://takao.blog/es/web/git-revert-merge-commit-safe/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-revert-merge-commit-safe/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-revert-merge-commit-safe-es.png" alt="Featured image of post Revertir merges en Git de forma segura" /&gt;&lt;p&gt;Revertir un merge commit es diferente a revertir un commit normal. Git necesita saber de qué lado del merge se revierte para evitar conflictos futuros.&lt;/p&gt;
&lt;h2 id="el-problema"&gt;El problema
&lt;/h2&gt;&lt;p&gt;Revertir un merge con &lt;code&gt;git revert -m 1&lt;/code&gt; revierte contra la primera rama (main). Si luego reintentas mergear la rama original, los cambios revertidos no reaparecen.&lt;/p&gt;
&lt;h2 id="cómo-revertir-correctamente"&gt;Cómo revertir correctamente
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git revert -m 1 &amp;lt;merge-commit-hash&amp;gt;&lt;/code&gt; para revertir contra main. Si necesitas reintroducir los cambios, revierte el revert: &lt;code&gt;git revert &amp;lt;revert-commit-hash&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Git Bisect: Depuración de regresiones binaria</title><link>https://takao.blog/es/web/git-bisect-debug-regression/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-bisect-debug-regression/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-bisect-debug-regression-es.png" alt="Featured image of post Git Bisect: Depuración de regresiones binaria" /&gt;&lt;p&gt;&lt;code&gt;git bisect&lt;/code&gt; realiza una búsqueda binaria para encontrar el commit que introdujo un bug. Es la herramienta más eficiente para depurar regresiones.&lt;/p&gt;
&lt;h2 id="uso-básico"&gt;Uso básico
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git bisect start&lt;/code&gt;, marca el commit bueno (&lt;code&gt;git bisect good&lt;/code&gt;) y el malo (&lt;code&gt;git bisect bad&lt;/code&gt;). Git checkout commits intermedios para probar.&lt;/p&gt;
&lt;h2 id="automatización"&gt;Automatización
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git bisect run &amp;lt;script&amp;gt;&lt;/code&gt; ejecuta un script que devuelve 0 (bueno) o distinto de 0 (malo). El proceso es completamente automático.&lt;/p&gt;
&lt;h2 id="estrategias"&gt;Estrategias
&lt;/h2&gt;&lt;p&gt;Bisect sobre un rango específico de commits. Usa &lt;code&gt;--first-parent&lt;/code&gt; para ignorar merges. Prueba en una rama limpia para evitar falsos positivos.&lt;/p&gt;</description></item><item><title>Firmado de commits con GPG en Git</title><link>https://takao.blog/es/web/git-commit-signing-gpg/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-commit-signing-gpg/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-commit-signing-gpg-es.png" alt="Featured image of post Firmado de commits con GPG en Git" /&gt;&lt;p&gt;Firmar commits con GPG verifica la identidad del autor. GitHub/GitLab muestran una insignia &amp;ldquo;Verified&amp;rdquo; en los commits firmados.&lt;/p&gt;
&lt;h2 id="configuración"&gt;Configuración
&lt;/h2&gt;&lt;p&gt;Genera una clave GPG: &lt;code&gt;gpg --full-generate-key&lt;/code&gt;. Configura &lt;code&gt;git config --global user.signingkey &amp;lt;KEY&amp;gt;&lt;/code&gt;. Firma commits con &lt;code&gt;-S&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="firma-automática"&gt;Firma automática
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt; firma todos los commits. &lt;code&gt;git config --global tag.gpgsign true&lt;/code&gt; para etiquetas.&lt;/p&gt;
&lt;h2 id="registro-en-github"&gt;Registro en GitHub
&lt;/h2&gt;&lt;p&gt;Añade la clave GPG pública en GitHub Settings → SSH and GPG keys. Verifica que los commits muestren &amp;ldquo;Verified&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Técnicas avanzadas de Git Stash</title><link>https://takao.blog/es/web/git-stash-advanced-techniques/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-stash-advanced-techniques/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-stash-advanced-techniques-es.png" alt="Featured image of post Técnicas avanzadas de Git Stash" /&gt;&lt;p&gt;&lt;code&gt;git stash&lt;/code&gt; guarda cambios temporales sin commitearlos. Más allá del uso básico, stash ofrece opciones avanzadas para flujos complejos.&lt;/p&gt;
&lt;h2 id="stash-parcial"&gt;Stash parcial
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git stash -p&lt;/code&gt; selecciona interactivamente qué cambios guardar. Útil cuando solo quieres stash una parte de los cambios.&lt;/p&gt;
&lt;h2 id="stash-con-archivos-no-rastreados"&gt;Stash con archivos no rastreados
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git stash -u&lt;/code&gt; (o &lt;code&gt;--include-untracked&lt;/code&gt;) guarda también archivos nuevos. &lt;code&gt;-a&lt;/code&gt; guarda incluso archivos ignorados.&lt;/p&gt;
&lt;h2 id="stash-nombrado"&gt;Stash nombrado
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git stash push -m &amp;quot;mensaje descriptivo&amp;quot;&lt;/code&gt; crea un stash con nombre. Listarlos con &lt;code&gt;git stash list&lt;/code&gt; y buscar con &lt;code&gt;git stash show -p &amp;lt;stash&amp;gt;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Git Blame: Ignorando cambios de formato con .git-blame-ignore-revs</title><link>https://takao.blog/es/web/git-blame-ignore-revs/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-blame-ignore-revs/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-blame-ignore-revs-es.png" alt="Featured image of post Git Blame: Ignorando cambios de formato con .git-blame-ignore-revs" /&gt;&lt;p&gt;&lt;code&gt;git blame&lt;/code&gt; es útil para encontrar quién cambió cada línea, pero los commits de formateo (Prettier, ESLint) contaminan los resultados. &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; resuelve esto.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;Crea un archivo &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; con los hashes de commits de formateo. Configura &lt;code&gt;git config blame.ignoreRevsFile .git-blame-ignore-revs&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="uso-directo"&gt;Uso directo
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git blame --ignore-revs-file .git-blame-ignore-revs archivo.ts&lt;/code&gt;. Muestra la autoría real ignorando los commits listados.&lt;/p&gt;
&lt;h2 id="soporte-en-github"&gt;Soporte en GitHub
&lt;/h2&gt;&lt;p&gt;GitHub respeta el archivo &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; automáticamente en la interfaz web. Añade también los commits de refactors grandes.&lt;/p&gt;</description></item><item><title>Git Worktree: Trabajar en múltiples ramas simultáneamente</title><link>https://takao.blog/es/web/git-worktree-multi-branches/</link><pubDate>Tue, 20 May 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-worktree-multi-branches/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-worktree-multi-branches-es.png" alt="Featured image of post Git Worktree: Trabajar en múltiples ramas simultáneamente" /&gt;&lt;p&gt;&lt;code&gt;git worktree&lt;/code&gt; permite tener múltiples copias del repositorio en diferentes directorios, cada una en una rama distinta. Sin cambiar de rama ni stash.&lt;/p&gt;
&lt;h2 id="uso-básico"&gt;Uso básico
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git worktree add ../rama-feature feature-branch&lt;/code&gt; crea un directorio &lt;code&gt;../rama-feature&lt;/code&gt; con la rama activa. Puedes trabajar en ambas simultáneamente.&lt;/p&gt;
&lt;h2 id="casos-de-uso"&gt;Casos de uso
&lt;/h2&gt;&lt;p&gt;Revisar un PR mientras trabajas en otra rama. Ejecutar tests en paralelo. Mantener una rama de producción abierta para hotfixes rápidos.&lt;/p&gt;
&lt;h2 id="gestión"&gt;Gestión
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git worktree list&lt;/code&gt; muestra todos los worktrees. &lt;code&gt;git worktree prune&lt;/code&gt; elimina referencias a directorios eliminados. Cada worktree comparte objetos pero tiene su propio index y HEAD.&lt;/p&gt;</description></item><item><title>Husky y Git Hooks: Previniendo bugs antes del commit</title><link>https://takao.blog/es/web/git-hooks-husky-prevent-bugs/</link><pubDate>Sun, 20 Apr 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-hooks-husky-prevent-bugs/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-hooks-husky-prevent-bugs-es.png" alt="Featured image of post Husky y Git Hooks: Previniendo bugs antes del commit" /&gt;&lt;p&gt;Husky facilita la configuración de hooks de Git para equipos de JavaScript/TypeScript. Previene commits con código roto o no formateado.&lt;/p&gt;
&lt;h2 id="instalación"&gt;Instalación
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;npx husky init&lt;/code&gt;. Crea un directorio &lt;code&gt;.husky/&lt;/code&gt; con scripts ejecutables. Husky 9 es la versión moderna, más ligera y simple.&lt;/p&gt;
&lt;h2 id="pre-commit-con-lint-staged"&gt;Pre-commit con lint-staged
&lt;/h2&gt;&lt;p&gt;Combina Husky con &lt;code&gt;lint-staged&lt;/code&gt; para ejecutar linters solo en los archivos modificados. Rápido y escalable incluso en proyectos grandes.&lt;/p&gt;
&lt;h2 id="pre-push-con-pruebas"&gt;Pre-push con pruebas
&lt;/h2&gt;&lt;p&gt;Ejecuta la suite de tests completa antes de permitir el push. Previene integraciones rotas en ramas compartidas.&lt;/p&gt;</description></item><item><title>Git Cherry-Pick: Casos de uso prácticos</title><link>https://takao.blog/es/web/git-cherry-pick-usecases/</link><pubDate>Tue, 25 Mar 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-cherry-pick-usecases/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-cherry-pick-usecases-es.png" alt="Featured image of post Git Cherry-Pick: Casos de uso prácticos" /&gt;&lt;p&gt;&lt;code&gt;git cherry-pick&lt;/code&gt; aplica commits específicos de una rama a otra. Esencial para hotfixes y selección selectiva de cambios.&lt;/p&gt;
&lt;h2 id="hotfixes-en-producción"&gt;Hotfixes en producción
&lt;/h2&gt;&lt;p&gt;Corrige un bug en main, luego cherry-pick el commit a release branches. Evita mergear toda la rama main con características incompletas.&lt;/p&gt;
&lt;h2 id="backport-de-cambios"&gt;Backport de cambios
&lt;/h2&gt;&lt;p&gt;Aplica parches seleccionados de una versión reciente a versiones anteriores mantenidas. Común en proyectos con LTS.&lt;/p&gt;
&lt;h2 id="reordenar-commits"&gt;Reordenar commits
&lt;/h2&gt;&lt;p&gt;Extrae commits de una rama de características y aplícalos en orden diferente. Útil cuando commits interdependientes se mezclan.&lt;/p&gt;</description></item><item><title>Git Rebase Interactivo: Flujo de trabajo avanzado</title><link>https://takao.blog/es/web/git-rebase-interactive-flow/</link><pubDate>Thu, 20 Feb 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-rebase-interactive-flow/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-rebase-interactive-flow-es.png" alt="Featured image of post Git Rebase Interactivo: Flujo de trabajo avanzado" /&gt;&lt;p&gt;&lt;code&gt;git rebase -i&lt;/code&gt; permite editar, reordenar, combinar y eliminar commits antes de integrarlos. Esencial para mantener un historial limpio.&lt;/p&gt;
&lt;h2 id="comandos-del-rebase-interactivo"&gt;Comandos del rebase interactivo
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pick&lt;/code&gt;: mantener commit. &lt;code&gt;reword&lt;/code&gt;: cambiar mensaje. &lt;code&gt;edit&lt;/code&gt;: modificar contenido. &lt;code&gt;squash&lt;/code&gt;: combinar con anterior. &lt;code&gt;fixup&lt;/code&gt;: combinar sin mensaje. &lt;code&gt;drop&lt;/code&gt;: eliminar.&lt;/p&gt;
&lt;h2 id="flujo-típico"&gt;Flujo típico
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git rebase -i HEAD~3&lt;/code&gt; para últimos 3 commits. 2. Reordenar para agrupar cambios relacionados. 3. Squash commits de WIP. 4. Reword mensajes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="resolución-de-conflictos"&gt;Resolución de conflictos
&lt;/h2&gt;&lt;p&gt;Git se detiene en cada conflicto. Resuelve, &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git rebase --continue&lt;/code&gt;. Usa &lt;code&gt;--skip&lt;/code&gt; para omitir un commit, &lt;code&gt;--abort&lt;/code&gt; para cancelar todo.&lt;/p&gt;</description></item><item><title>Git Hooks: Automatización del flujo de trabajo</title><link>https://takao.blog/es/web/git-hooks-automation/</link><pubDate>Tue, 24 Dec 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-hooks-automation/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-hooks-automation-es.png" alt="Featured image of post Git Hooks: Automatización del flujo de trabajo" /&gt;&lt;p&gt;Los hooks de Git son scripts que se ejecutan en eventos específicos del ciclo de vida de Git. Automatizan validaciones, pruebas y despliegues.&lt;/p&gt;
&lt;h2 id="hooks-del-lado-cliente"&gt;Hooks del lado cliente
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pre-commit&lt;/code&gt;: antes del mensaje de commit. &lt;code&gt;pre-push&lt;/code&gt;: antes del push. &lt;code&gt;post-commit&lt;/code&gt;: después del commit. &lt;code&gt;pre-rebase&lt;/code&gt;: antes del rebase.&lt;/p&gt;
&lt;h2 id="hooks-del-lado-servidor"&gt;Hooks del lado servidor
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pre-receive&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;post-receive&lt;/code&gt;. Se ejecutan en el repositorio remoto. Ideales para CI/CD y políticas de equipo.&lt;/p&gt;
&lt;h2 id="ejemplos-prácticos"&gt;Ejemplos prácticos
&lt;/h2&gt;&lt;p&gt;pre-commit: lint, formateo, pruebas rápidas. pre-push: tests completos, verificación de builds. post-commit: notificaciones, actualización de issues.&lt;/p&gt;</description></item><item><title>Git LFS: Gestión de archivos grandes</title><link>https://takao.blog/es/web/git-lfs/</link><pubDate>Tue, 26 Nov 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-lfs/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-lfs-es.png" alt="Featured image of post Git LFS: Gestión de archivos grandes" /&gt;&lt;p&gt;Git LFS (Large File Storage) reemplaza archivos grandes con punteros de texto en el repositorio, mientras almacena el contenido real en un servidor remoto.&lt;/p&gt;
&lt;h2 id="instalación"&gt;Instalación
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git lfs install&lt;/code&gt; configura Git para usar LFS. Luego &lt;code&gt;git lfs track &amp;quot;*.psd&amp;quot;&lt;/code&gt; para rastrear archivos grandes por patrón.&lt;/p&gt;
&lt;h2 id="flujo-de-trabajo"&gt;Flujo de trabajo
&lt;/h2&gt;&lt;p&gt;Los archivos LFS se usan como archivos normales. Git LFS maneja automáticamente la descarga/subida. El diff muestra el puntero, no el binario.&lt;/p&gt;
&lt;h2 id="límites-y-costos"&gt;Límites y costos
&lt;/h2&gt;&lt;p&gt;GitHub: 1GB gratis, luego pago por ancho de banda. Bitbucket y GitLab tienen políticas similares. Bandwidth se consume en push y pull.&lt;/p&gt;</description></item><item><title>Squash Merge: Limpieza de historial en GitHub</title><link>https://takao.blog/es/web/git-squash-merge/</link><pubDate>Tue, 21 May 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-squash-merge/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-squash-merge-es.png" alt="Featured image of post Squash Merge: Limpieza de historial en GitHub" /&gt;&lt;p&gt;Squash merge combina todos los commits de una rama en un solo commit al mergear. Produce un historial limpio sin commits de WIP ni experimentales.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;GitHub (y GitLab) ofrecen squash merge como opción al fusionar PRs. Todos los commits de la rama se comprimen en uno con un mensaje nuevo.&lt;/p&gt;
&lt;h2 id="beneficios"&gt;Beneficios
&lt;/h2&gt;&lt;p&gt;Historial lineal y legible. Cada commit en main representa una característica completa. Fácil revertir características enteras con un solo revert.&lt;/p&gt;</description></item><item><title>Git Submodules: Dependencias anidadas</title><link>https://takao.blog/es/web/git-submodules/</link><pubDate>Mon, 22 Jan 2024 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/git-submodules/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/git-submodules-es.png" alt="Featured image of post Git Submodules: Dependencias anidadas" /&gt;&lt;p&gt;Los submódulos de Git permiten incluir un repositorio dentro de otro como una referencia versionada. Mantienen independencia de historial.&lt;/p&gt;
&lt;h2 id="añadir-un-submódulo"&gt;Añadir un submódulo
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git submodule add &amp;lt;url&amp;gt; &amp;lt;path&amp;gt;&lt;/code&gt; clona el repositorio y crea un archivo &lt;code&gt;.gitmodules&lt;/code&gt;. El commit padre registra el hash exacto del submódulo.&lt;/p&gt;
&lt;h2 id="clonar-con-submódulos"&gt;Clonar con submódulos
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git clone --recurse-submodules &amp;lt;url&amp;gt;&lt;/code&gt; clona el proyecto y todos los submódulos. Para repos existentes: &lt;code&gt;git submodule update --init --recursive&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="actualizar-submódulos"&gt;Actualizar submódulos
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git submodule update --remote&lt;/code&gt; actualiza al último commit de la rama configurada. Luego commitear el cambio de hash en el repositorio padre.&lt;/p&gt;</description></item><item><title>Guía completa de Git para desarrolladores web</title><link>https://takao.blog/es/web/how-to-git/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/how-to-git/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/how-to-git-es.png" alt="Featured image of post Guía completa de Git para desarrolladores web" /&gt;&lt;p&gt;Git es el sistema de control de versiones esencial para el desarrollo web moderno. Esta guía cubre desde la configuración inicial hasta flujos de equipo.&lt;/p&gt;
&lt;h2 id="configuración-inicial"&gt;Configuración inicial
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global user.name &lt;span style="color:#e6db74"&gt;&amp;#34;Tu Nombre&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global user.email &lt;span style="color:#e6db74"&gt;&amp;#34;email@ejemplo.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config --global init.defaultBranch main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="flujo-diario"&gt;Flujo diario
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git pull&lt;/code&gt; → &lt;code&gt;git checkout -b feature/nombre&lt;/code&gt; → trabajo → &lt;code&gt;git add&lt;/code&gt; → &lt;code&gt;git commit&lt;/code&gt; → &lt;code&gt;git push -u origin feature/nombre&lt;/code&gt; → abrir PR.&lt;/p&gt;
&lt;h2 id="resolución-de-conflictos"&gt;Resolución de conflictos
&lt;/h2&gt;&lt;p&gt;Los conflictos ocurren cuando dos ramas modifican las mismas líneas. Márcalos: &lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt;, &lt;code&gt;=======&lt;/code&gt;, &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;. Resuelve, &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Guía de GitHub para desarrolladores</title><link>https://takao.blog/es/web/how-to-github/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0900</pubDate><guid>https://takao.blog/es/web/how-to-github/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/how-to-github-es.png" alt="Featured image of post Guía de GitHub para desarrolladores" /&gt;&lt;p&gt;GitHub es la plataforma de colaboración de código más grande. Más allá de git push/pull, ofrece herramientas de gestión de proyectos y CI/CD.&lt;/p&gt;
&lt;h2 id="pull-requests"&gt;Pull Requests
&lt;/h2&gt;&lt;p&gt;Los PRs son el corazón de la colaboración. Incluye descripción, contexto, capturas y enlaces a issues. Revisión de código con comentarios en línea.&lt;/p&gt;
&lt;h2 id="issues-y-projects"&gt;Issues y Projects
&lt;/h2&gt;&lt;p&gt;Issues para bugs y características. Projects (tableros Kanban) para gestión visual. Labels, milestones, assignees y templates.&lt;/p&gt;
&lt;h2 id="github-actions"&gt;GitHub Actions
&lt;/h2&gt;&lt;p&gt;CI/CD integrado. Workflows YAML para tests, lint, despliegues. Actions del Marketplace para integraciones comunes.&lt;/p&gt;</description></item></channel></rss>