Извлечение предыдущих закреплений
Git позволяет извлечь из журнала любое закрепление, не только последнее. Для этого в команде вместо точки указываются первые 6 символов идентификатора. Выполняя извлечение, вы можете просмотреть более раннее закрепление и либо вернуться к своему последнему закреплению, либо отказаться от всей последней работы и продолжить разработку с более раннего закрепления:
git_practice$ git log --pretty=oneline
08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting.
be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.
git_practice$ git checkout be017b
Note: checking out 'be017b'.
(1) You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at be017b7... Started project.
git_practice$
При извлечении предыдущего закрепления вы покидаете ветвь master и входите в состояние, которое Git называет отсоединенным состоянием HEAD (1) . HEAD — текущее состояние проекта; «отсоединенным» оно называется потому, что мы покинули именованную ветвь (master в данном случае).
Чтобы вернуться к ветви master, извлеките ее:
git_practice$ git checkout master
Previous HEAD position was be017b7... Started project.
Switched to branch 'master'
git_practice$
Вы снова возвращаетесь к ветви master. Не вносите изменения в проект при извлечении старого закрепления, если не хотите использовать использовать расширенные возможности Git. Но вы можете вернуться к предыдущему состоянию, если над проектом больше никто не работает. Работая в ветви master, введите следующую команду:
(1) git_practice$ git status
# On branch master
nothing to commit, working directory clean
(2)git_practice$ git log --pretty=oneline
08d4d5e39cb906f6cff197bd48e9ab32203d7ed6 Extended greeting.
be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.
(3)git_practice$ git reset --hard be017b
HEAD is now at be017b7 Started project.
(4)git_practice$ git status
# On branch master
nothing to commit, working directory clean
(5)git_practice$ git log --pretty=oneline
be017b7f06d390261dbc64ff593be6803fd2e3a1 Started project.
git_practice$
Сначала мы проверяем статус и убеждаемся в том, что текущей является ветвь master (1) . В журнале присутствуют оба закрепления (2). Затем выдается команда git reset --hard с первыми шестью символами идентификатора того закрепления, к которому нужно вернуться (3). Далее повторная проверка статуса показывает, что мы находимся в главной ветви, а закреплять нечего (4). Повторное обращение к журналу показывает, что проект находится в том состоянии, к которому мы решили вернуться (5).