Как уже было сказано, ответом является git add
файл. e.g.:
git add path/to/untracked-file
git stash
Однако, вопрос также поднимается в другом ответе: что, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, ты должен. И будет работать НЕ :
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
это не удастся, как показано ниже:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Итак, что вы можете сделать? Ну, вы должны действительно добавить файл, однако , вы можете эффективно удалить его позже, с помощью 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
И затем вы можете продолжить работу, в том же состоянии, в котором вы находились до git add
(а именно с неотслеживаемым файлом с именем path/to/untracked-file
; плюс любые другие изменения, которые могли иметься в отслеживаемых файлах).
Еще одна возможность для рабочего процесса на этом будет что-то вроде:
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
[Примечание. Как уже упоминалось в комментарии @mancocapac, вы можете добавить --exclude-standard
к команде git ls-files
(т. Е. git ls-files -o --exclude-standard
).]
... что также может быть легко написано в сценарии - подойдут даже псевдонимы (представленные в синтаксисе zsh; при необходимости измените) [также я сократил имя файла, чтобы оно умещалось на экране без прокрутки в этом ответе; не стесняйтесь подставлять альтернативное имя файла по вашему выбору]:
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'
Обратите внимание, что последний может быть лучше в качестве сценария или функции оболочки, чтобы разрешить ввод параметров в git stash
, если вы не хотите pop
, но apply
и / или хотите иметь возможность указать конкретный тайник, а не просто взять верхний. Возможно, это (вместо второго псевдонима выше) [пробелы разделены, чтобы соответствовать без прокрутки; повторно добавить для повышения разборчивости]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Примечание : в этой форме вам необходимо указать аргумент действия, а также идентификатор, если вы собираетесь указать идентификатор тайника, например, unstashall apply stash@{1}
или unstashall pop stash@{1}
Что, конечно, вы бы положили в .zshrc
или эквивалент, чтобы сделать его долгосрочным.
Надеюсь, этот ответ кому-нибудь пригодится, и все собрано в одном ответе.