Tengo cambios en un archivo, además de un archivo nuevo, y me gustaría usar git stash para guardarlos mientras paso a otra tarea. Pero git stash por sí mismo sólo almacena los cambios en el archivo existente; el nuevo archivo permanece en mi árbol de trabajo, desordenando mi trabajo futuro. ¿Cómo puedo almacenar este archivo sin seguimiento?
Para almacenar su directorio de trabajo incluyendo los archivos no rastreados (especialmente los que están en el .gitignore) entonces probablemente quiera usar este cmd:
git stash --include-untracked
.
Actualización 17 de mayo de 2018:
Las nuevas versiones de git ahora tienen git stash --all
que almacena todos los archivos, incluyendo los archivos no rastreados e ignorados.
git stash --include-untracked
ya no toca los archivos ignorados (probado en git 2.16.2).
Respuesta original abajo:
*[Advertencia, hacer esto borrará permanentemente tus archivos si tienes alguna entrada de directorio/ en tu archivo gitignore]1**
A partir de la versión 1.7.7 puedes usar git stash --include-untracked
o git stash save -u
para almacenar archivos sin seguimiento sin ponerlos en escena.
Añade (git add
) el archivo y empieza a rastrearlo. Después, escóndelo. Como todo el contenido del archivo es nuevo, será almacenado, y podrás manipularlo como sea necesario.
Pensé que esto podría resolverse diciéndole a git que el archivo existe, en lugar de confirmar todo su contenido en el área de preparación, y luego llamar a git stash
. Araqnid describe cómo hacer lo primero.
git add --intent-to-add path/to/untracked-file
o
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
Sin embargo, esto último no funciona:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state