Как было сказано в другом месте, ответ git add
на файл. например:
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
или эквивалент, чтобы сделать существование в долгосрочной перспективе.
Надеюсь, этот ответ будет полезен для кого-то, и все будет собрано в одном ответе.
git stash show
ничего не возвращается, и у вас может возникнуть желание удалить его (как я только что сделал, когда в нем содержался полезный скрипт, который я написал несколько месяцев назад → как вернуть сброшенный занач )