Шкатулка - это специальный коммит слияния рабочего дерева между базовым коммитом и индексом. Одним из способов может быть сохранение каждого из них в виде отдельных исправлений, извлечение первого родителя хранилища, восстановление индекса и рабочего дерева из двух исправлений и, наконец, восстановление хранилища (кажется, что один ответ идет таким образом).
Это необходимо для полного воссоздания всей информации из хранилища, и, если вас это не волнует, вам следует как минимум проверить первого родителя хранилища перед его восстановлением, чтобы избежать конфликтов и отследить, где был создан хранилище.
Это то, что я сделал, чтобы полностью восстановить все тайники из одного репо в другой. Если у вас их нет на одном компьютере, вы можете сохранить теги stash в комплекте после их создания и скопировать список ссылок и пакет на целевой компьютер.
Из корня оригинального репо:
- Получить список тайников
- Пометьте свои ссылки на stash, чтобы вы могли получить их с помощью git fetch (имена тегов не имеют значения, измените их в случае конфликта. Я использовал
stash_ + число (и) в логической ссылке на stash)
- Преобразуйте логические ссылки в хэши sha1 в обратном порядке. - мы будем использовать их позже
- Сохранить этот путь репо - также на потом
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
NB: для этого требуется bash или совместимая оболочка (ksh, zsh должен делать ...). Вы также можете увеличить значение переменной, например stash_$((i++)) если ваша оболочка не поддерживает${param//pattern}
Теперь в новом репо для каждого реф:
- Получить ссылку из старого репозитория (нам даже не нужно использовать имена тегов, потому что мы пометили их, мы можем получить их с помощью git fetch)
- Повторно импортируйте тайник из ссылки, используя тему этой ссылки в качестве сообщения тайника.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash saveнастоящее время устарела в пользуgit stash push