Как удалить стаск, созданный с помощью git stash create?

Git stash, похоже, делает много чего я хочу, за исключением того, что это немного сложно для script, так как если у вас нет изменений, то git stash; git stash pop будет делать что-то другое, чем если бы вы изменения в вашем репозитории.

Похоже, что git stash create является ответом на эту проблему, и все работает, за исключением одной вещи... Я не могу избавиться от созданного stash. Есть ли способ избавиться от кошелька?

Чтобы сделать это на 100% ясным, что я делаю:

Создайте трюк:

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

Используйте тайник:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

Удалить тайник: (за исключением того, что этот последний бит не работает)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

Ответ 1

Чтобы удалить обычный stash, созданный с помощью git stash, вы хотите git stash drop или git stash drop [email protected]{n}. Подробнее см. ниже.


Вам не нужно удалять stash, созданный с помощью git stash create. Из документов:

Создайте запись stash (которая является обычным объектом коммита) и верните имя ее объекта, не сохраняя его где-либо в пространстве имен ref. Это должно быть полезно для сценариев. Вероятно, это не та команда, которую вы хотите использовать; см. выше "Сохранить".

Поскольку ничто не ссылается на коммит, это в конечном итоге приведет к сбору мусора.


Тайник, созданный с помощью git stash или git stash save, сохраняется в refs/stash и может быть удален с помощью git stash drop. Как и для всех объектов Git, фактическое содержимое stashа не удаляется с вашего компьютера до тех пор, пока gc не удалит эти объекты после истечения срока их действия (по умолчанию это 2 недели спустя).

Старые stashи сохраняются в refs/stash reflog (попробуйте cat .git/logs/refs/stash) и могут быть удалены с помощью git stash drop [email protected]{n}, где n - это номер, показанный git stash list.

Ответ 2

git stash drop не принимает никакого параметра - который сбрасывает верхний stash - или ссылку на stash, которая выглядит следующим образом: [email protected]{n}, который n назначает, какой stash для сброса. Вы не можете передать идентификатор коммита git stash drop.

git stash drop            # drop top hash, [email protected]{0}
git stash drop [email protected]{n}  # drop specific stash - see git stash list

Отбрасывание stashа изменит обозначения [email protected]{n} всех stashов дальше по стеку.

Я не уверен, почему вы думаете, что нужно удалить шкатулку, потому что, если вы используете stash create, запись к шкатулке не создается для вашего "stashа", поэтому не нужно ничего отбрасывать.

Ответ 3

Если вы на 100% уверены, что у вас есть только один stash или хотите удалить все stashи (для уверенности на 107% git stash list), вы можете сделать следующее:

git stash clear

..и забудь о них (он удаляет все stashи).

Примечание: добавлен этот ответ для тех, кто попал сюда и ищет способ очистить их всех (как я).

Ответ 4

Из git doc: http://git-scm.com/docs/git-stash

drop [-q | --quiet] []

Удалите из списка закладок одно спрятанное состояние. Когда нет, он удаляет последний. т.е. [email protected]{0}, в противном случае должна быть действительная ссылка журнала пробела формы stash @{}.

Пример:

git stash drop [email protected]{5}

Это приведет к удалению записи stash 5. Чтобы просмотреть весь список задержек:

git stash list

Ответ 5

Вы должны использовать

git stash save

а не

git stash create

потому что это создает stash (который является обычным объектом фиксации) и возвращает его имя объекта без хранения в любом месте в пространстве имен ref. Следовательно, они не будут доступны с приложением.

Использование git stash save "some comment" используется, когда у вас есть неустановленные изменения, которые вы хотите реплицировать/переместить на другую ветку

Используйте git stash apply [email protected]{0} (если ваш сохраненный индекс закладок равен 0), когда вы хотите, чтобы ваши сохраненные (спрятанные) изменения отражались на вашей текущей ветке

вы всегда можете использовать git stash list для проверки всех индексов stash

и используйте git stash drop [email protected]{0} (при условии, что ваш сохраненный индекс stash равен 0, и вы хотите его удалить), чтобы удалить конкретный тираж.

Ответ 6

Это тоже работает

git stash drop <index>

лайк

git stash drop 5

Ответ 7

Документ находится здесь (на китайском языке), пожалуйста, нажмите.

Вы можете использовать

git stash list

git stash drop stash @{0}

enter image description here