Как удалить тайник, созданный с помощью git stash create? - PullRequest
464 голосов
/ 21 апреля 2011

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

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

Чтобы на 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

Ответы [ 6 ]

795 голосов
/ 21 апреля 2011

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

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

267 голосов
/ 21 апреля 2011

Для удаления обычного тайника, созданного с помощью git stash, требуется git stash drop или git stash drop stash@{n}. Подробнее см. Ниже.


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

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

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


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

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

195 голосов
/ 30 августа 2014

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

git stash clear

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

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

84 голосов
/ 22 апреля 2015

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

drop [-q | --quiet] []

Удалить одно состояние хранилища из списка хранилищ.Если нет, он удаляет самый последний.т. е. stash@{0}, в противном случае это должна быть действительная ссылка на журнал тайников в форме stash@ndomcasts.

пример:

git stash drop stash@{5}

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

git stash list
70 голосов
/ 03 ноября 2011

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

git stash save

а не

git stash create

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

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

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

Вы всегда можете использовать git stash list, чтобы проверить все ваши тайники

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

0 голосов
/ 03 июля 2019

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

git stash drop <index>

как

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