Git восстановить спрятанные изменения после слияния --no-ff

Я часто использую «git stash» и «git stash pop» для сохранения и восстановления изменений в моем рабочем дереве. Это то, что я сделал, и мои предыдущие незафиксированные изменения теперь исчезли.

git stash -u
git checkout master
git pull --rebase
git checkout dev
git merge --no-ff master
10 files changed, 1000 insertions(+), 2000 deletions(-)
git stash pop 
CONFLICT (content): Merge conflict in file.ext

Затем я подумал, что могу отменить слияние, и я сделал:

git reset --hard origin/master
git reset --hard origin/master

Теперь я не вижу ни одного из моих предыдущих спрятанных незафиксированных изменений нигде в file.ext, только объединенный код. Как я могу вернуть все изменения, которые я изначально спрятал?


person user43092    schedule 13.06.2012    source источник


Ответы (1)


Когда вы pop отключаете stash, он также удаляет его из stash. Таким образом, спрятанные изменения были сброшены обратно в ваш рабочий каталог. Затем, когда вы reset, вы отменили те же самые изменения.

git reset --hard — одна из немногих опасных команд типа «вы можете полностью потерять работу здесь». Это очень хорошо объясняет различные аспекты reset.

Подводя итог, они больше не находятся в stash, а вы reset в рабочем каталоге. Так что они, скорее всего, были потеряны в эфире битов и байтов. Хотя, поскольку эти изменения когда-то были спрятаны, вы можете найти фиксацию с помощью git fsck --lost-found.

person redhotvengeance    schedule 13.06.2012