git stash store "$(git stash create)"
Создает запись в stash, аналогичную той, которую вы получили бы с git stash
, фактически не затрагивая и не очищая ваш рабочий каталог и индекс.
Если вы проверите список тайников или посмотрите на весь график коммитов (включая тайник), то увидите, что это результат, аналогичный тому, который вы получили бы при обычном вызове git stash
. Просто сообщение в списке хранилищ отличается (обычно это что-то вроде "stash @ {0}: WIP на master: 14e009e init commit" , здесь мы получим "stash @ {0}: Создано через "git stash store" ")
$ git status --short
M file.txt
A file2.txt
$ git stash list
$ git stash store "$(git stash create)"
$ git stash list
stash@{0}: Created via "git stash store".
$ git stash show 'stash@{0}'
file.txt | 2 +-
file2.txt | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
$ git log --oneline --graph --all
* 85f937b (refs/stash) WIP on master: 14e009e init commit
|\
| * 26295a3 index on master: 14e009e init commit
|/
* 14e009e (HEAD -> master) init commit
$ git status
M file.txt
A file2.txt
Немного больше объяснений:
Запись git stash представлена с помощью обычных коммитов с некоторой определенной структурой. По сути, это обычный объект фиксации, у которого есть 2 родителя (или 3, если вы используете опцию --include-untracked
) (дополнительная информация 1 , 2 ).
git stash create
создает этот коммит, представляющий запись в тайник, и возвращает вам имя объекта (SHA-1) объекта коммита (тот, у которого 2 или 3 родителя). Это висячий коммит (вы можете проверить его, позвонив git fsck
после git stash create
). Вам нужно указать refs/stash
на этот висячий коммит, и вы сделаете это git stash store
(или git update-ref
, как в других ответах, потому что git stash store
использует git update-ref
для своей работы) .
Хорошо бы взглянуть на фактический исходный код git stash push
и увидеть, что он в основном вызывает git stash create
и git stash store
, а затем выполняет некоторую логику для очистки файлов (что один зависит от того, какие опции вы использовали в git stash push
).