Как отменить sta sh pop в Git, не сбрасывая мои незафиксированные изменения? - PullRequest
1 голос
/ 22 февраля 2020

Я внес некоторые незафиксированные изменения перед выполнением git stash pop. Как я могу отменить stash pop, не удаляя мои незафиксированные изменения?

git reset --hard HEAD сбросит мои локальные изменения.

1 Ответ

2 голосов
/ 22 февраля 2020

Как только вы запустите 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.

...