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
git apply
запуск во втором блоке кода на момент написания этой статьи не применял патч - об этом сообщало сообщение об ошибке в выходных данных. Таким образом, на самом деле вы пытались создать тайник (который не работал, см. Комментарии ниже), применить тайник, который не был создан, а затем выбросить тайник, который не был создан. Вот почему вы ничего не сделали.git stash apply
он работал. Вgit apply
попытки прочитать локальный файл патч, который не существует. Честно говоря, это, вероятно, просто не должно быть там, и это никогда не могло бы работать. Я смутно испытываю желание убрать его из вопроса, но, учитывая, что он помог многим в его нынешнем виде, я оставлю это как есть.Ответы:
Чтобы удалить нормальный тайник, созданный с помощью
git stash
, вы хотитеgit stash drop
илиgit stash drop stash@{n}
. Подробности смотрите ниже.Вам не нужно удалять тайник, созданный с помощью
git stash create
. Из документов:Поскольку ничто не ссылается на коммит, то в конечном итоге он будет собирать мусор.
Тайник, созданный с помощью
git stash
илиgit stash save
сохраненный вrefs/stash
, и может быть удален сgit stash drop
. Как и для всех объектов Git, фактическое содержимое тайника не удаляется с вашего компьютера доgc
тех пор, пока эти объекты не будут удалены после истечения срока их действия (по умолчанию это 2 недели спустя).Старые тайники сохраняются в
refs/stash
reflog (trycat .git/logs/refs/stash
) и могут быть удалены с помощьюgit stash drop stash@{n}
, гдеn
указано числоgit stash list
.источник
git stash
- я не знаю, соответствует ли это действительностиgit stash create
или что-то еще. Git - это, конечно, то, о чем я все еще учусь (если бы не было, я бы не читал SO Q & As вот так).git stash create
для. Вместо того, чтобы сохранять в файле патчей с меткой времени, вы можете просто позволить git reflog сохранить его для вас в пользовательском реф (напримерrefs/backup
). Я хотел бы попробовать что - то вроде 1)git stash create
, 2) сравнить дерево нового притон сrefs/backup^{tree}
, 3) , если дерево отличается,git update-ref --create-reflog refs/backup <stash-sha>
. В конце концов старые резервные копии будут автоматически удалены.git stash drop
не принимает никакого параметра - который сбрасывает верхний тайник - или ссылку на тайник, которая выглядит следующим образом:stash@{n}
которая указывает,n
какой тайник удалить. Вы не можете передать идентификатор коммитаgit stash drop
.Отбрасывание тайник будет менять на
stash@{n}
обозначения всех тайниках далее вниз по стеку.Я не уверен, почему вы думаете, что нужно удалить шкатулку, потому что, если вы используете
stash create
шкатулку, она не создана для вашего "тайника", поэтому не нужно ничего отбрасывать.источник
Если вы на 100% уверены, что у вас есть только один тайник или хотите удалить все тайники (убедитесь,
git stash list
что вы уверены на 107%), вы можете сделать следующее:..и забыть о них (он удаляет все тайники).
Примечание: добавлен этот ответ для тех, кто попал сюда и ищет способ очистить их всех (как я).
источник
git stash drop
, так как он оставляет только один тайник, и вам не нужно беспокоиться о потере больше, чем ожидалось.git stash drop
как обычно. Я не уверен, что я сделал по-другому. Во всяком случае,git stash clear
работал на меня. Не знал, что это существует. +1Из git doc: http://git-scm.com/docs/git-stash
Удалить одно спрятанное состояние из списка. Если нет, он удаляет самый последний. т. е. в
stash@{0}
противном случае должна быть действительная ссылка на журнал stash вида stash @ {}.пример:
Это приведет к удалению записи тайника 5. Чтобы увидеть весь список тайников:
источник
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
перед выполнениемgit stash drop
. Поверьте, это избавит вас от многих неприятностей :)Вы должны использовать
и не
потому что это создает stash (который является обычным объектом коммита) и возвращает его имя объекта, не сохраняя его где-либо в пространстве имен ref. Следовательно не будет доступно с применением тайника.
Используется,
git stash save "some comment"
когда у вас есть неустановленные изменения, которые вы хотите скопировать / перенести в другую ветку.Используйте
git stash apply stash@{0}
(при условии, что ваш сохраненный индекс хранилища равен 0), если вы хотите, чтобы ваши сохраненные (спрятанные) изменения отражались на вашей текущей веткеВы всегда можете использовать,
git stash list
чтобы проверить все ваши тайникии используйте
git stash drop stash@{0}
(при условии, что ваш сохраненный индекс тайника равен 0, и вы хотите удалить его), чтобы удалить конкретный тайник.источник
git stash
умолчаниюgit stash save
git stash create
предназначен для использования скриптами. Это вариант использования ОП. Таким образом, рекомендацииgit stash save
могут быть полезны для «нормального» использования, но не для варианта использования OP. OP может захотеть взглянуть на документы : например, есть больше команд, связанных со сценариямиgit stash store
git stash save "message"
в наше время следует читатьgit stash push -m "message"
. Сравнитеgit commit -m "message"
Это тоже работает
подобно
источник
Документ находится здесь (на китайском языке), пожалуйста, нажмите.
ты можешь использовать
источник
git stash create
отличаетсяgit stash save
, в частности, форма создания не отображается в списке и не может быть удалена, поэтому вопрос.источник