Herramientas de rescate en Git: mantener el control cuando el flujo se rompe
Llegados a este punto, ya sabes trabajar con Git de forma consciente. Sabes crear historia, recorrerla, corregir errores y colaborar. Ese flujo cubre la mayoría de situaciones reales. Sin embargo, cuando el trabajo se vuelve menos lineal —interrupciones, urgencias, errores difíciles de localizar— aparecen momentos en los que el flujo normal no basta.
Git no te obliga a improvisar en esos casos. Incluye herramientas específicas para recuperar el control sin romper la historia, pensadas para usarse de forma puntual, no constante. Entenderlas no te convierte en experto, pero te evita bloqueos innecesarios.
Cuando el trabajo no está listo para ser guardado
Hay una situación muy común en proyectos reales: estás trabajando en algo que todavía no funciona. Has tocado varios archivos, has probado ideas, y el proyecto está en un estado intermedio. De repente, necesitas cambiar de contexto: revisar otro archivo, cambiar de rama, atender una urgencia.
En ese momento no quieres hacer commit. No porque sea imposible, sino porque no sería honesto. Guardar estados rotos o incompletos contamina la historia y dificulta entenderla después.
Aquí aparece git stash.
git stash
Este comando aparta todos los cambios actuales —tanto los preparados como los no preparados— y devuelve el proyecto exactamente al último punto estable. El trabajo no se pierde. Simplemente queda guardado fuera del flujo principal.
Conceptualmente, git stash significa esto:
“Esto todavía no forma parte de la historia. Guárdalo y seguimos luego”.
Cuando quieras retomar ese trabajo, lo recuperas:
git stash pop
El proyecto vuelve al estado en el que lo dejaste, con los mismos cambios y archivos. La historia no se ha modificado en ningún momento.
Esta herramienta no acelera el desarrollo. Evita decisiones apresuradas cuando el trabajo aún no está listo.
Cuando solo necesitas un cambio concreto
Otro escenario frecuente aparece en equipos o proyectos con varias ramas. En una rama secundaria se ha hecho una corrección importante. Esa rama todavía no está preparada para integrarse por completo, pero ese cambio concreto sí es necesario ahora.
Fusionar toda la rama sería excesivo. Esperar, arriesgado.
Para estos casos existe git cherry-pick.
git cherry-pick <hash-del-commit>
Este comando toma un commit específico y aplica su efecto en la rama actual como un nuevo commit. No mueve ramas. No mezcla historias completas. Es una acción precisa y deliberada.
Conceptualmente:
“Este cambio es válido aquí. El resto, no”.
Tras el cherry-pick, la corrección existe también en main, sin esperar a una fusión completa. Es una herramienta potente que debe usarse con criterio, pero resuelve situaciones reales de urgencia.
Cuando sabes que algo se rompió, pero no cuándo
Hay errores especialmente frustrantes: sabes que antes funcionaba, ahora no, y el problema apareció en algún punto del camino. Revisar commit a commit puede ser lento e impreciso.
Git ofrece una herramienta para este caso: git bisect.
La idea es sencilla. Le dices a Git dos cosas:
- Un punto donde sabes que todo funcionaba.
- Un punto donde sabes que falla.
Git se encarga de moverse por la historia, probando puntos intermedios y reduciendo el rango hasta encontrar el primer commit defectuoso.
git bisect start
git bisect good <commit-bueno>
git bisect bad
A partir de ahí, Git te va colocando en distintos estados del proyecto. Tú solo respondes a una pregunta:
“¿Aquí funciona o no?”
No cambia la historia. No arregla el error por sí mismo. Te dice exactamente dónde mirar.
Qué tienen en común estas herramientas
Aunque stash, cherry-pick y bisect parecen comandos muy distintos, todos cumplen la misma función: proteger el control cuando el flujo normal se rompe.
No sustituyen a add, commit o log. No se usan todos los días. Aparecen cuando el trabajo real introduce interrupciones, urgencias o incertidumbre.
Saber que existen ya reduce la ansiedad. Saber cuándo usarlas evita decisiones incorrectas.
Antes de pasar a GitHub
Con esto, Git queda completo como sistema local:
- Sabes crear y recorrer historia.
- Sabes corregir errores sin borrar el pasado.
- Sabes colaborar sin plataformas externas.
- Sabes versionar estados importantes.
- Sabes reaccionar cuando el flujo se complica.