Hoy en la oficina hemos simulado un caso donde nuestro querido Yeradis, vino con un problema con el stash, donde "mágicamente" desaparecieron los ficheros que intentaba subir a git.
Yeradis siempre te abre un mundo donde las cosas ocurren de una manera un tanto especial.
Y si, de verdad que desaparecen. Y tiene su lógica, aunque a priori, parece una incongruencia, profundizando , observaremos que el funcionamiento es el adecuado.
Vamos a realizar todos los pasos, porque son muy sencillos replicarlos en un simple directorio.
Creamos un directorio y nos colocamos y ejecutamos;
$ git init
$ touch readme
$ git commit -am "prueba"
Bien, tenemos ya nuestro primer commit en el repositorio local.
Ahora vamos a crear otro fichero, pero lo meteremos en el stash.
Bien, el fichero noseve.txt, efectivamente no se ve.
Si aplicamos $ git stash pop, volvería a parecer, borrando el stash, teniendo el fichero en cuestión.
Ahora bien, cuando usamos "herramientas visuales", a veces las facilidades nos causan destrozos, como por ejemplo, desde SourceTree, y le damos a "borrar" el stash. ¿ Donde está fichero ?
Ya no se puede recuperar. Porque no hay nada. El fichero noseve.txt, al estar en el stash, y borrar el stash, no podemos recuperarlo.
Para simularlo desde la consola, vamos a eliminar la pila del stash, borrando el contenido.
$git stash drop stash@{0}
Dropped stash@{0} (41fd10ece492b8f2f4911af2522bbf60b66ed789)
Hay que ser piltrafilla ;-)
Como se ha realizado un movimiento, bueno, en este caso 2 movimientos, uno es dejarlo en el index, y el otro moverlo al stash, podemos seguir su rastro con este comando;
git fsck --unreachable | grep commit
Esto nos va a mostrar los sha1 , el del index y el del stash.
Y si tenemos el sha1, tenemos los ficheros ;-)
Creamos una rama para ubicarlos temporalmente o hacer un merge en la rama actual;
git checkout -b rama_test 41fd10ece492b8f2f4911af2522bbf60b66ed789
git merge 41fd10ece492b8f2f4911af2522bbf60b66ed789
Ahora, si miras los ficheros, verás que aparece por ahí el noseve.txt. ;-)
Cada día que pasa, más me gusta Git.
No hay comentarios:
Publicar un comentario