git reset --hard HEAD
просто возвращает все ваши изменения из вашего рабочего дерева (без резервного копирования)
git reset --hard HEAD~1
возвращает вас к родителю текущей ревизии (без резервного копирования, без сохранения изменений)
git reset --hard HEAD^
То же самое, что и предыдущий. Синтаксически разные, это немного разные. ^ используется, чтобы указать родителям на коммит слияния, тогда как ~ это возврат родителей в ревизиях с первым родителем. Таким образом, HEAD~
= HEAD^
, но HEAD~2
означает 2 ревизии назад в истории от текущей ревизии, тогда как HEAD^2
получает второго родителя текущей ревизии (при условии, что текущая ревизия является коммитом слияния)
git reset --hard ORIG_HEAD
Возвращает вас (без резервной копии) к ревизии, которой вы были до вашей последней операции извлечения / слияния / фиксации / возврата / cherry-pick (нет необходимости в родительских и дочерних отношениях с текущей ревизией). Если бы вы были на branchA
, а затем переключились на branchB
, то ORIG_HEAD
было бы branchA
... на самом деле не сама ветвь, а ревизия, где она была в тот момент. Он вышел из употребления, так как синтаксис HEAD@{1}
намного мощнее, потому что вы можете сказать другие вещи, такие как , где я был 3 ревизии назад с HEAD@{3}
. Итак, если бы вы были на branchA
, переключились на branchB
, то branchC
, тогда HEAD@{1}
было бы branchB
, HEAD@{2}
было бы ответвлением A (опять же, не ветвями, а ревизиями, на которые они указывали)в этот момент. Если ветвь перемещается, это не изменит ревизию).