Te recomendamos que pruebes esta respuesta en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Los archivos sin seguimiento se almacenan en el tercer padre de una confirmación oculta. (Esto en realidad no está documentado, pero es bastante obvio a partir de la confirmación que introdujo la característica -u, 787513…, y la forma en que el resto de la documentación para git-stash
frases cosas… o simplemente haciendo git log --graph [email protected]0
)
Puede ver solo la parte “sin seguimiento” del alijo a través de:
git show [email protected]0^3
o, simplemente, el propio árbol “sin seguimiento”, a través de:
git show [email protected]0^3:
o, un archivo particular “sin seguimiento” en el árbol, a través de:
git show [email protected]0^3:
Desafortunadamente, no hay una buena manera de obtener un resumen de las diferencias entre todos los estados preparados, no preparados y sin seguimiento frente al estado “actual”. es decir: git show [email protected]0
no se puede hacer para incluir los archivos sin seguimiento. Esto se debe a que el objeto de árbol de la confirmación de alijo se conoce como [email protected]0:
no incluye ningún cambio del tercer elemento primario “sin etapas”.
Esto se debe a la forma en que se vuelven a aplicar los alijos: los archivos con seguimiento se pueden aplicar fácilmente como parches, mientras que los archivos sin seguimiento solo se pueden aplicar, en teoría, como “archivos completos”.
Puede enumerar todas las confirmaciones ocultas con el siguiente comando:
git rev-list -g stash
Dado que los alijos se representan como una confirmación de combinación de 3 vías de HEAD, el índice y una confirmación “raíz” sin padre de archivos sin seguimiento, los alijos de archivos sin seguimiento se pueden enumerar canalizando el resultado anterior a lo siguiente:
git rev-list -g stash | git rev-list --stdin --max-parents=0
Aplicaciones útiles de lo anterior:
Mostrar solo archivos ocultos sin seguimiento
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
Por supuesto, quita el --stat
para ver el contenido de los archivos.
Buscar un archivo específico
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep
Grep archivos sin seguimiento
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep
Listar todo el contenido de todos los escondites
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
Para enumerar los archivos sin seguimiento en el alijo:
git ls-tree -r [email protected]0^3 --name-only
Para mostrar una diferencia completa de todos los archivos sin seguimiento (con contenido):
git show [email protected]0^3
Estos comandos leen el último alijo (el más reciente). Para alijos anteriores, incremente el número detrás de “[email protected]”, por ejemplo [email protected]2
para el segundo del último alijo.
La razón por la que esto funciona es que git stash
crea un compromiso de fusión para cada alijo, al que se puede hacer referencia como [email protected]0
, [email protected]1
etc. El primer padre de esta confirmación es el HEAD en el momento del almacenamiento, el segundo padre contiene los cambios en los archivos rastreados y el tercero (que puede no existir) los cambios en los archivos no rastreados.
Esto se explica en parte en la página de manual en “Discusión”.
Te invitamos a añadir valor a nuestro contenido informacional cooperando tu veteranía en las ilustraciones.