Какой самый простой способ отменить
git reset HEAD~
команда? В настоящее время единственный способ, которым я могу думать, - сделать "git clone http://..." из удаленного репо.
Какой самый простой способ отменить
git reset HEAD~
команда? В настоящее время единственный способ, которым я могу думать, - сделать "git clone http://..." из удаленного репо.
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
.
Старый вопрос, и опубликованные ответы отлично работают. Я буду перебирать еще один вариант.
git reset ORIG_HEAD
ORIG_HEAD
ссылается на фиксацию, которую ранее ссылался HEAD
.
Моя ситуация была несколько иной, я сделал git reset HEAD~
три раза.
Чтобы отменить это, я должен был сделать
git reset [email protected]{3}
чтобы вы могли сделать
git reset [email protected]{N}
Но если вы сделали git reset, используя
git reset HEAD~3
вам нужно будет
git reset [email protected]{1}
Как {N} представляет количество операций в Reflog. Как отметил Марк в комментариях.
1. Используйте git reflog
, чтобы обновить все ссылки.
2. git reset <id_of_commit_to_which_you_want_restore>