Esta inquietud se puede abordar de diferentes maneras, pero te mostramos la que en nuestra opinión es la resolución más completa.
Solución:
Una vez que sepa el hash de la confirmación de alijo que dejó caer, puede aplicarlo como un alijo:
git stash apply $stash_hash
O bien, puede crear una rama separada para él con
git branch recovered $stash_hash
Después de eso, puedes hacer lo que quieras con todas las herramientas normales. Cuando termines, simplemente vuela la rama.
Encontrar el hachís
Si acaba de abrirlo y el terminal aún está abierto, aún tendrá el valor hash impreso por git stash pop
en pantalla (gracias, Dolda).
De lo contrario, puede encontrarlo usando esto para Linux, Unix o Git Bash para Windows:
git fsck --no-reflog | awk '/dangling commit/ print $3'
…o usando Powershell para Windows:
git fsck --no-reflog | select-string 'dangling commit' | foreach $_.ToString().Split(" ")[2]
Esto le mostrará todas las confirmaciones en las puntas de su gráfico de confirmación a las que ya no se hace referencia desde ninguna rama o etiqueta: cada confirmación perdida, incluida cada confirmación oculta que haya creado, estará en algún lugar de ese gráfico.
La forma más fácil de encontrar la confirmación oculta que desea es probablemente pasar esa lista a gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ print $3' )
…o vea la respuesta de emragins si usa Powershell para Windows.
Esto abrirá un navegador de repositorio que le mostrará cada confirmación en el repositorio alguna vezindependientemente de si es accesible o no.
Puedes reemplazar gitk
allí con algo como git log --graph --oneline --decorate
si prefiere un buen gráfico en la consola en lugar de una aplicación GUI separada.
Para detectar confirmaciones ocultas, busque mensajes de confirmación con este formato:
Trabajo en curso en alguna rama: commithash Algún mensaje de confirmación antiguo
Nota: El mensaje de confirmación solo tendrá este formato (comenzando con “WIP activado”) si no proporcionó un mensaje cuando lo hizo git stash
.
Si no cerró la terminal, solo mire la salida de git stash pop
y tendrá el ID de objeto del alijo caído. Normalmente se ve así:
$ git stash pop
[...]
Dropped refs/[email protected]0 (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Tenga en cuenta que git stash drop
también produce la misma línea.)
Para recuperar ese alijo, solo corre git branch tmp 2cae03e
, y lo obtendrás como una rama. Para convertir esto en un alijo, ejecute:
git stash apply tmp
git stash
Tenerlo como rama también te permite manipularlo libremente; por ejemplo, seleccionarlo o fusionarlo.
Solo quería mencionar esta adición a la solución aceptada. No fue inmediatamente obvio para mí la primera vez que probé este método (tal vez debería haberlo sido), pero para aplicar el alijo del valor hash, simplemente use “git stash apply”:
$ git stash apply ad38abbf76e26c803b27a6079348192d32f52219
Cuando era nuevo en git, esto no estaba claro para mí, y estaba probando diferentes combinaciones de “git show”, “git apply”, “patch”, etc.
Sección de Reseñas y Valoraciones
Ten en cuenta dar difusión a esta sección si te fue de ayuda.