Saltar al contenido

En git, ¿hay alguna manera de mostrar archivos ocultos sin seguimiento sin aplicar el alijo?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *