Как только вы запустите git stash pop
, изменения будут применены к вашему рабочему дереву, и sta sh будет удален. В зависимости от того, сколько изменилось между временем, когда вы запустили pop
, и теперь, есть вероятность, что вы можете восстановить sta sh из журналов фиксации (при сбое создается несколько ссылок на фиксацию), но это может быть непросто. .
Сначала следуйте этому сообщению , чтобы попытаться получить га sh для коммита sta sh, который вы хотите восстановить. Как только он найден, создайте ветку с ним (я назову его stash_data
и предположим, что мы начинаем с ветви master
):
git branch stash_data [stash hash ID]
Эта ветвь теперь должна иметь только содержимое sta sh и ни одно из других изменений. Теперь создайте новую ветку, чтобы зафиксировать все незафиксированные изменения - и sta sh и non-sta sh (я назову это combined_data
).
[on `master` branch, with all changes]
git checkout -b combined_data
git add [your files]
git commit -m "preparing to revert a stash pop"
Теперь есть 3 филиала. Один с примененными изменениями sta sh (stash_data
), один со всеми примененными изменениями (combined_data
) и один на базовом уровне (master
). Примените разницу между stash_data
и master
к combined_data
:
[still on branch `combined_data`]
git diff stash_data master | git apply
combined_data
теперь должны иметь только те изменения, которые не были в sta sh, и stash_data
должен иметь только те изменения, которые были в sta sh.