Як було сказано в іншому місці, відповідь - на 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
нічого не повертає, і ви можете спокусити його відкинути (як я це робив, коли він містив корисний сценарій, який я писав кілька місяців тому → як відновити скинуту скриньку )