Tema 21: Resolver conflictos al recuperar un stash
Un stash se creó sobre un commit concreto. Si la rama cambia después, recuperar ese borrador requiere combinarlo con el contexto actual. Git puede hacerlo automáticamente o detenerse con un conflicto, igual que en las integraciones que ya estudiaste.
git stash apply conserva la entrada tanto si se aplica limpiamente como si tiene conflicto. git stash pop solo elimina automáticamente la entrada cuando la aplicación termina correctamente. Si aparece un conflicto, normalmente la conserva para que no pierdas la referencia al trabajo guardado.
Consulta status, abre el archivo y decide la versión final. Elimina los marcadores y prepara el resultado con add. A diferencia de un merge pendiente, aquí no necesitas crear un commit de merge con dos padres: estás recuperando trabajo. Puedes terminar con un commit normal cuando hayas revisado lo que quieres conservar.
No existe un comando estándar git stash --continue ni git stash --abort. En nuestras prácticas se empieza con un directorio limpio. Si necesitas descartar la aplicación, puedes restaurar el índice y el trabajo desde el commit actual de forma deliberada; un reset --hard HEAD descarta también cualquier otra edición local, por lo que exige comprobar antes qué contiene el trabajo. Los retos de este tema piden resolver, no descartar.
Después de resolver, consulta otra vez stash list. Si utilizaste pop y falló, no des por borrada la entrada. Solo usa drop cuando ya hayas verificado la recuperación y quieras eliminarla; en ambos retos la conservamos para comprobar este comportamiento.
La combinación correcta depende del significado del texto. Dejar un archivo sin marcadores no demuestra por sí solo que hayas conservado las intenciones necesarias.
Comandos para probar #
1git stash list 2git stash apply 3git status 4git add README.md 5git commit -m "Combina el trabajo recuperado" 6git stash list
Error que conviene evitar #
Repetir pop durante un conflicto sin resolver o buscar un stash --continue inexistente. Resuelve el trabajo y verifica las entradas restantes.
Laboratorio local #
Prueba los comandos y observa qué cambia. Puedes reiniciar sin guardar una entrega. Los retos evaluables y el cuestionario están en las actividades de este tema.
Git / práctica local
Aplica con conflicto
Aplicar edición cambia el archivo; git add lo prepara.
Historial de commits
Las líneas conectan los commits con sus padres. Los commits que ya no tienen una referencia también permanecen visibles en este laboratorio.
- 0000002: Cambia título; HEAD → main
- 0000001: Commit inicial;
Comparar trabajo, índice y HEAD
Trabajo
Trabajo de main
Índice (staging)
Trabajo de main
HEAD
Trabajo de main
TERMINAL
Sesión local preparada. Escribe help para consultar los comandos de este tema.
Comandos disponibles y límites
git --version · git config --global <clave> [valor] git init · git status git add <archivo | .> · git commit -m "mensaje" · git log git log --oneline · git switch <rama> (antes: checkout) git restore [--staged] <archivo> · git commit --amend [-m "mensaje" | --no-edit] git switch --detach <commit> · HEAD · HEAD~1 git diff [--staged | <commit> <commit>] git remote [-v] · git remote add <nombre> <URL> · git remote get-url <nombre> · git remote set-url <nombre> <URL> git clone <URL> git push [-u] <remoto> <rama> ssh-keygen -t ed25519 · ssh -T git@github.com (ficticios) git branch [nombre] · git branch -m <nombre> · git branch -d <rama> · git switch -c <rama> git merge [--ff-only] <rama> git merge --no-ff <rama> · git log --graph --all --decorate git merge --abort · editar conflicto, git add y git commit -m "mensaje" git config --global alias.st status · git st git tag [nombre] · git tag -a <nombre> -m "mensaje" · git tag -n · git push origin <tag> git reset --soft|--mixed|--hard <commit> · git reflog git stash push [-u] [-m "mensaje"] · list · show · apply · pop · drop help · clear
Sesión en memoria: recargar descarta la práctica. Doscientas acciones como máximo. Dos archivos editables de hasta 250 líneas. Diez ramas como máximo. Diez entradas de stash como máximo. El modelo no ejecuta comandos reales ni realiza conexiones externas. diff muestra contenido anterior y posterior por archivo.
Resumen
- La recuperación debe combinar el borrador con la versión actual.
- La eliminación automática depende de una aplicación correcta.
- Compruébalo después de resolver.
- Repetir pop durante un conflicto sin resolver o buscar un stash --continue inexistente. Resuelve el trabajo y verifica las entradas restantes.