Dado que git se trata fundamentalmente de administrar un contenido e índice de todo el repositorio (y no uno o varios archivos), las git stash
ofertas, no sorprendentemente,con todo el directorio de trabajo.
En realidad, desde Git 2.13 (Q2 2017), puede guardar archivos individuales con git stash push
:
git stash push [--] [<pathspec>...]
Cuando pathspec
se le da a ' git stash push
', el nuevo alijo registra los estados modificados solo para los archivos que coinciden con la especificación de la ruta. Consulte " Cambios del alijo a archivos específicos " para obtener más información.
Ejemplo simplificado:
git stash push path/to/file
El caso de prueba para esta función muestra algunas opciones más desactivadas:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
La respuesta original (a continuación, junio de 2010) fue sobre seleccionar manualmente lo que desea guardar.
CasebashComentarios de :
Este el stash --patch
solución original) es buena, pero a menudo modifico muchos archivos, por lo que usar parche es molesto
bukzor 's respuesta (upvoted, noviembre de 2011) sugiere una solución más práctica, en base a
git add
+git stash --keep-index
.
Ve a ver y vota su respuesta, que debería ser la oficial (en lugar de la mía).
Sobre esa opción, chhh señala un flujo de trabajo alternativo en los comentarios:
deberías " git reset --soft
" después de un alijo para recuperar tu puesta en escena clara:
para llegar al estado original, que es un área de puesta en escena clara y con solo algunas modificaciones seleccionadas sin puesta en escena, uno podría restablecer suavemente el índice para obtener (sin cometer algo como tú, bukzor, lo hizo).
(Respuesta original de junio de 2010: alijo manual)
Sin embargo, git stash save --patch
podría permitirte lograr el alijo parcial que buscas:
Con --patch
, puede seleccionar interactivamente trozos en la diferencia entre HEAD y el árbol de trabajo que se va a guardar.
La entrada oculta se construye de manera tal que su estado de índice es el mismo que el estado de índice de su repositorio, y su árbol de trabajo contiene solo los cambios que seleccionó interactivamente. Los cambios seleccionados se revierten de su árbol de trabajo.
Sin embargo, eso guardará el índice completo (que puede no ser lo que desea, ya que podría incluir otros archivos ya indexados) y un árbol de trabajo parcial (que podría parecerse al que desea guardar).
git stash --patch --no-keep-index
podría ser una mejor opción.
Si --patch
no funciona, un proceso manual podría:
Para uno o varios archivos, una solución intermedia sería:
- copiarlos fuera del repositorio de Git
(en realidad, eleotlecram propone una alternativa interesante )
git stash
- copiarlos de nuevo
git stash
# esta vez, solo se guardan los archivos que deseas
git stash pop stash@{1}
# vuelve a aplicar todas las modificaciones de tus archivos
git checkout -- afile
# restablecer el archivo al contenido HEAD, antes de cualquier modificación local
Al final de ese proceso bastante engorroso, solo tendrá uno o varios archivos escondidos.
git stash --keep-index
mantiene el índice, pero oculta todo , tanto dentro como fuera del índice.