"git stash create x" - где это? - PullRequest
7 голосов
/ 06 июля 2011

Если я создаю коммит с git stash create whatever, я получаю обратно хеш коммита, но не могу найти этот хеш коммита с git reflog.

git log stash тоже не работает, не работает git stash list.

Как мне составить список коммитов, которые я создаю, используя git stash create?

Ответы [ 3 ]

8 голосов
/ 16 июля 2016

Хотя технически работает ответ в https://stackoverflow.com/a/6589093/39155, решение Git 2.9.0 устарело, и есть встроенный способ хранения ссылок на тайные тайники (git stash store).

git stash create создает висячий коммит и нигде не будет хранить ссылку. Вам нужно набрать git stash store, если вы хотите сохранить его. Из справочной страницы git-stash:

Создает stash (который является обычным объектом коммита) и возвращает его имя объекта, не сохраняя его где-либо в пространстве имен ref

Чтобы сохранить его в пространстве имен ref и связать его с ref кэша, вам нужно запустить git stash store <commit>. Э.Г.

$ git stash create
09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash store 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: Created via "git stash store".

Если вы хотите связать имя с ссылкой на тайник, просто передайте -m / --message на git stash store.

$ git stash store -m "my stash" 09eb9a97ad632d0825be1ece361936d1d0bdb5c7
$ git stash list
stash@{0}: my stash
3 голосов
/ 06 июля 2011

Редактировать

спасибо за сообщение о новой функции (?)

На странице руководства написано:

Создайте stash (который является обычным объектом коммита) и верните его имя объекта, не сохраняя его где-либо в пространстве имен ref.

не хранится где-либо в пространстве имен ref. Вам придется следить за этим. Если вы потеряли его,

git fsck --unreachable 

может дать подсказку. Остерегайтесь истечения срока действия, поэтому не делайте git gc --prune=... только тогда

3 голосов
/ 06 июля 2011

Если вы используете сценарий в этом ответе , вы можете сделать git stash list.

#!/bin/sh
#
# git-stash-push
# Push working tree onto the stash without modifying working tree.
# First argument (optional) is the stash message.
if [ -n "$1" ]; then
        git update-ref -m "$1" refs/stash "$(git stash create \"$1\")"
else
        HASH=`git stash create`
        MESSAGE=`git --no-pager log -1 --pretty="tformat:%-s" "$HASH"`
        git update-ref -m "$MESSAGE" refs/stash "$HASH"
fi

Тогда вы можете захотеть вернуть этот коммит в какой-то момент. Для этого вы можете перечислить тайники, используя git stash list, что дает вам что-то вроде этого (помните, это могут быть глупые сообщения о коммите):

stash@{0}: WTF? Nothing is working
stash@{1}: it's all working perfectlY!
stash@{2}: blah2

Затем вы можете восстановить, скажем, blah2, запустив:

 git stash pop stash@{2}

или, как указывает @Eliot, вы можете использовать это, чтобы не уничтожить ваш тайник:

 git stash apply stash@{2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...