2013-11-11 4 views
7

Могу ли я восстановить следующую фиксацию после жесткого сброса?Как восстановить последнюю фиксацию после жесткого сброса git?

Шаги:

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 

Любой путь из этого беспорядка, чтобы восстановить свои изменения?

+2

Несколько вопросов: (1) Действительно ли было выполнено совершение на шаге 4? (2) Вы на самом деле сделали перебазу на шаге 8 или еще нет? (3) Что означает «все кибоше»? Вы видите совершение, сделанное на шаге 4 вообще, это каким-то образом искалечено или просто отсутствует? (4) Вы видите свою фиксацию в 'git reflog' на 001-ветке? Reflog - это обычный способ выкопать себя из такого рода вещей. –

+0

спасибо reflog получил его обратно – JaJ

ответ

7

Чтобы увидеть все изменения, внесенные в вашу ветку 001, вы можете сделать git reflog 001-branch, однако, скорее всего, вы уверены, что сделали в 001-ветке, возможно, вы сделали еще одну ветку, так что вам, вероятно, нужно изучить все изменения с git reflog.

+0

потрясающий, спасибо за информацию. вернуться к нормальной жизни. :) – JaJ

9

git reflog show распечатать хэш недостающего коммита? Если да, то git checkout -b recovery-branch commitId создаст новую ветвь, указывающую на отсутствующую фиксацию. Затем вы можете объединить по мере необходимости.

+0

да, это сделал трюк ... спасибо! – JaJ

3

Каждый раз, когда git делает что-то решительное, как изменение или перематывание ветвей, он записывает это в reflog. Другими словами, тщательно проверьте вывод git reflog, он расскажет вам обо всех переходах, которые у вас есть. Затем вы можете использовать git show commit_id для проверки и git checkout commit_id, чтобы вернуться.

+0

спасибо, что он вернулся! – JaJ

+0

Спасибо! .. Я вернул его! –

2

Честно говоря, я не понимаю, что произошло.

git reflog печатает, что фиксирует ветку указал на. Вы можете использовать его, чтобы найти сумму SHA1 последних местных совершает сделки.

+0

yep, вот и все. я смог вернуть его за рефлог. Спасибо! – JaJ

Смежные вопросы