Como se ha dicho en otra parte, la respuesta es al git add
archivo. p.ej:
git add path/to/untracked-file
git stash
Sin embargo, la pregunta también se plantea en otra respuesta: ¿Qué sucede si realmente no desea agregar el archivo? Bueno, por lo que puedo ver, tienes que hacerlo. Y lo siguiente NO funcionará:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
esto fallará, como sigue:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
¿Entonces que puedes hacer? Bueno, realmente debe agregar el archivo, sin embargo , puede desagruparlo efectivamente más adelante, con git rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Y luego puede continuar trabajando, en el mismo estado en el que estaba antes git add
(es decir, con un archivo path/to/untracked-file
no rastreado llamado ; más cualquier otro cambio que haya tenido que rastrear archivos).
Otra posibilidad para un flujo de trabajo en esto sería algo como:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[Nota: Como se menciona en un comentario de @mancocapac, es posible que desee agregar --exclude-standard
al git ls-files
comando (así que git ls-files -o --exclude-standard
).]
... que también se puede escribir fácilmente: incluso los alias funcionarían (presentado en sintaxis zsh; ajustar según sea necesario) [también, acorté el nombre del archivo para que todo se ajuste en la pantalla sin desplazarse en esta respuesta; no dude en sustituir un nombre de archivo alternativo de su elección]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Tenga en cuenta que este último podría ser mejor como un script o función de shell, para permitir que los parámetros que se deben proporcionar a git stash
, en caso de que no desea pop
sino apply
, y / o quieren ser capaces de especificar un alijo específica, en lugar de limitarse a tomar la parte superior uno. Quizás esto (en lugar del segundo alias, arriba) [espacio en blanco despojado para ajustarse sin desplazarse; re-agregar para mayor legibilidad]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Nota : en este formulario, debe proporcionar un argumento de acción, así como el identificador si va a proporcionar un identificador oculto, por ejemplo, unstashall apply stash@{1}
ounstashall pop stash@{1}
Lo que, por supuesto, pondría en su .zshrc
o equivalente para hacer que exista a largo plazo.
Esperemos que esta respuesta sea útil para alguien, ya que reúne todo en una sola respuesta.
git stash show
no devuelve nada y puede sentirse tentado a soltarlo (como acabo de hacer mientras contenía un script útil que escribí hace unos meses) → cómo recuperar un alijo caído )