Ваш существующий sta sh не совсем потерян . Ну, это трудно найти, так что в этом смысле он "потерян". Случилось так, что git filter-branch
повредил . git stash
делает два, а иногда и три коммита, причем ключевой коммит похож на коммит слияния. Большинство Git команд рассматривают это как слияние. Это включает в себя git filter-branch
. Это может повредить sta sh -группе, поскольку сама git stash
требует этих странно сформированных скоплений коммитов - они выглядят как слияния, но не могут рассматриваться как слияния.
Так как ничего в Git на самом деле может изменить любые существующие коммиты, однако то, что сделала ветвь фильтра, было скопировать sta sh в новые и "улучшенные" (но на самом деле, поврежденные) коммиты. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) * * * * * * * * * * * * 10 * * * * * * * * * * * * * * * '' 10 * '' * * * * * * * * * '' 10 * '' * ' 1022 *, как это было до операции ветвления фильтра. (Это предполагает один проход filter-branch
; для каждого дополнительного прохода потребуется -f
или удаление предыдущего refs/original/
пробела, любой из которых уничтожает значение, которое вы хотели получить здесь.)
Если вы использовали sta sh "стек", который находится в reflog для самого refs/stash
. Он должен быть неповрежденным, за исключением того, что последняя запись, stash@{1}
, должна содержать старое значение refs/stash
до операции ветвления фильтра. Это обеспечивает еще один способ восстановления, если вы перенесли имена refs/original
. Если вы выполнили несколько проходов git filter-branch
, вам может потребоваться большее число, чем 1
.
Если все остальное не помогло, метод git fsck
, описанный в git stash
документации , ближе к концу под Восстановление sta sh записей, которые были ошибочно очищены / отброшены , доступно, но болезненно.
(Кстати, не то, чтобы это помогло при this балл - это одна из многих причин, по которой я рекомендую избегать git stash
большую часть времени. Поскольку все, что он делает, это делает коммиты, просто делает нормальные коммиты. Остальные Git будут хорошо работать с эти нормальные коммиты.)