2012-06-13 2 views
0

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

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, только объединенный код. Как я могу вернуть все изменения, которые я изначально спрятал?

ответ

3

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

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

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

+0

Спасибо, изучая трудный путь ... – user43092

+0

Стоит отметить, что есть в порядке ... –