Si corro git stash -u
, puedo guardar archivos sin seguimiento. Sin embargo, dichos archivos sin seguimiento no aparecen en absoluto con git stash show stash@{0}
. ¿Hay alguna forma de mostrar archivos ocultos sin seguimiento sin aplicar el alijo?
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 The commit que introdujo la función -u, 787513 ... , y la forma en que el resto de la documentación paragit-stash
frases cosas ... o simplemente haciendo git log --graph stash@{0}
)
Puede ver solo la parte "sin seguimiento" del alijo a través de:
git show stash@{0}^3
o, solo el árbol "sin seguimiento" en sí, a través de:
git show stash@{0}^3:
o un archivo "sin seguimiento" en particular en el árbol, a través de:
git show stash@{0}^3:<path/to/file>
Desafortunadamente, no existe una buena manera de obtener un resumen de las diferencias entre todos los estados por etapas + sin etapas + sin seguimiento y el estado "actual". es decir: git show stash@{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 en sí mismo, al que se stash@{0}:
hace referencia como , no incluye ningún cambio del tercer padre "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".
git stash show
parece mostrar la diferencia entre la copia de trabajo y el # 1 (código relevante de git-stash.sh :git diff ${FLAGS:---stat} $b_commit $w_commit
, en el que $ b_commit es el # 1 y $ w_commit es el compromiso de alijo); ¿Hay alguna forma incorporada paragit stash show
incluir también el n. ° 3?git log --graph --topo-order -m -u
. matthewlmcclure.com/s/2014/01/10/…fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
) si en realidad no tiene archivos sin seguimiento en ese alijo (pero pensó que sí).git stash show
no , no muestra los archivos sin seguimiento (verdadero para al menos git 2.7.4):git stash pop
primero intentará restaurar los archivos no rastreados, luego intentará restaurar los archivos rastreados. Si la última operación falla (por ejemplo, un conflicto), la primera operación no se revierte (el almacenamiento de archivos sin seguimiento permanecerá como está, pero los archivos no se eliminarán del disco), por lo que incluso si soluciona el conflicto, la siguiente ventana emergente fallará. de todas formas.Puede enumerar todas las confirmaciones ocultas con el siguiente comando:
Dado que las reservas se representan como una combinación de confirmación de 3 vías de HEAD, el índice y una confirmación "raíz" sin padres de archivos sin seguimiento, las reservas de archivos sin seguimiento se pueden enumerar canalizando la salida anterior a lo siguiente:
Aplicaciones útiles de lo anterior:
Mostrar solo archivos ocultos sin seguimiento
Por supuesto, elimine el
--stat
para ver el contenido de los archivos.Encuentra un archivo específico
Archivos sin seguimiento de grep
Enumere todo el contenido de todos los alijos
fuente
Para enumerar los archivos sin seguimiento en el alijo:
Para mostrar una diferencia completa de todos los archivos sin seguimiento (con contenido):
Estos comandos leen el último (más reciente) alijo. Para alijos anteriores, incremente el número detrás del "alijo @", por ejemplo,
stash@{2}
para el segundo desde el último alijo.La razón por la que esto funciona es que
git stash
crea una confirmación de fusión para cada alijo, a la que se puede hacer referencia comostash@{0}
,stash@{1}
etc. El primer padre de esta confirmación es el HEAD en el momento del alijo, el segundo padre contiene los cambios en los archivos rastreados y el tercero (que puede no existir) los cambios en los archivos sin seguimiento.Esto se explica en parte en la página de manual en "Discusión" .
fuente
Para ver todos los archivos en el alijo (tanto con seguimiento como sin seguimiento), agregué este alias a mi configuración:
Se necesita un solo argumento del alijo que desea ver. Tenga en cuenta que todavía lo presentará en dos listas consecutivas.
La
if...fi
sección cambia el argumento de bash $ 1 a 0 si no se pasó ninguno.fuente
Una solución alternativa: organizar los archivos antes de guardarlos hará que
git stash show -p
funcione como se esperaba.Nota: De esta manera también se da el poder de agregar partes interactivas, así es como se hace .
Precaución: asegúrese de no tener un trabajo preparado previamente, o no podrá distinguirlo.
Esto puede ser de utilidad.
fuente