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