Как восстановить последнюю фиксацию после git hard reset?
Можно ли восстановить следующую фиксацию после жесткого reset?
Шаги:
1) $ (master) // ....made a bunch of changes to files thinking I was working on a branch
2) $ git checkout -b 001-branch // copy changes to a branch to work with
3) $ (001-branch) // make some more changes to files
4) $ (001-branch) git commit -a -m 'added and changed stuff'
// at this point I was just going to pull force master to latest then rebase my 001-branch off of original master (not the stuff I had modified)
5) $ (001-branch) git checkout master
6) $ (master) git reset --hard HEAD
7) $ (master) git pull
8) $ (master) git checkout 001-branch // go back to my branch and rebase my changes
9) $ (001-branch) // oops...my changes were all kiboshed and I don't see the commit I did per git lg
В любом случае из этого беспорядка, чтобы восстановить мои изменения?
Ответы
Ответ 1
Чтобы увидеть все изменения, внесенные в вашу ветку 001, вы можете сделать git reflog 001-branch
, однако вероятность того, что вы думаете, что вы сделали в 001-ветке, возможно, вы сделали еще одну ветку, поэтому вам, вероятно, нужно изучить все изменяется с помощью git reflog
.
Ответ 2
Выдает ли git reflog show
хэш отсутствующего коммита? Если да, то git checkout -b recovery-branch commitId
создаст новую ветвь, указывающую на отсутствующую фиксацию. Затем вы можете объединить по мере необходимости.
Ответ 3
Каждый раз, когда git делает что-то резкое, как изменение или перематывание ветвей, он записывает это в reflog. Другими словами, тщательно проверяйте вывод git reflog
, он расскажет вам обо всех переходах, которые у вас есть. Затем вы можете использовать git show commit_id
для проверки и git checkout commit_id
для возврата.
Ответ 4
Честно говоря, я не понимаю, что произошло.
git reflog
печатает то, на что указывает ветвь.
Вы можете использовать его, чтобы найти сумму SHA1 последних локальных коммитов.