У вас есть несколько вариантов, чтобы отменить ваш последний коммит.
Вот некоторые из ваших вариантов, обобщенных в один ответ с фрагментами кода
, Прежде всего, вам нужно выяснить, какие «неправильные» коммиты вы хотите отбросить. Мы будем использовать git reflog
, чтобы найти его.
Вы также всегда можете использовать reflog
.
git reflog
отобразит любое изменение, которое обновило HEAD
, и проверка желаемой записи reflog вернет HEAD
к этому коммиту.
Каждый раз, когда изменяется ГОЛОВКА, в reflog
.
появляется новая запись.
reflog
аналогичен команде истории Unix и хранится локально на вашем компьютере.
git reflog
git checkout HEAD@{...}
# or
git checkout <sha-1>
Используя checkout, вы можете вернуться к любому желаемому коммиту и создать ветку или любые другие опции, которые вам позволит сделать git checkout.
«Переместить» вернуть голову к желаемому коммиту.
Git reset проверит желаемое содержание коммита в вашу промежуточную область и / или в ваш рабочий каталог на основе значения --hard/--soft/--mixed
, которое вы выберете. --hard
обновит и область рабочей области, и рабочий каталог с заданным содержимым и "отсоединит" любые другие коммиты за пределами этой точки в вашей локальной ветке.
Если эти коммиты не являются частью какой-либо другой ветки, они станут "болтаться".
Контент «болтаться» означает, что в вашем локальном репозитории есть недоступный контент, который не является частью какой-либо другой ветви и может быть удален или будет удален с помощью gc
.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
Эта схема иллюстрирует, какая команда что делает.
Как вы можете видеть reset && checkout
изменить HEAD
.