Ответ 1
Краткий ответ:
git reset '[email protected]{1}'
Длинный ответ:
Git хранит журнал всех обновлений ref (например, checkout, reset, commit, merge). Вы можете просмотреть его, набрав:
git reflog
Где-то в этом списке происходит фиксация, которую вы потеряли. Скажем, вы только что набрали git reset HEAD~
и хотите его отменить. Мой рефлог выглядит так:
$ git reflog
3f6db14 [email protected]{0}: HEAD~: updating HEAD
d27924e [email protected]{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
В первой строке указано, что HEAD
0 позиций назад (другими словами, текущая позиция) равно 3f6db14; он был получен сбросом до HEAD~
. Во второй строке указано, что HEAD
1 позиция назад (другими словами, состояние до reset) - d27924e. Он был получен путем проверки конкретного фиксации (хотя это и не важно сейчас). Итак, чтобы отменить reset, запустите git reset [email protected]{1}
(или git reset d27924e
).
Если, с другой стороны, вы запустили некоторые другие команды с тех пор, когда вы обновили HEAD, то фиксация, которую вы хотите, не будет в верхней части списка, и вам нужно будет выполнить поиск по reflog
.
Последнее замечание: может быть проще посмотреть на reflog
для конкретной ветки, которую вы хотите отменить reset, скажем, мастера, а не HEAD
:
$ git reflog show master
c24138b [email protected]{0}: merge origin/master: Fast-forward
90a2bf9 [email protected]{1}: merge origin/master: Fast-forward
[...]
У этого должно быть меньше шума, чем в общем HEAD reflog
.