Skip to content

Instantly share code, notes, and snippets.

@genakim
Last active July 14, 2018 14:53
Show Gist options
  • Save genakim/ddd50af082639eb7e0f0251a901d993f to your computer and use it in GitHub Desktop.
Save genakim/ddd50af082639eb7e0f0251a901d993f to your computer and use it in GitHub Desktop.

HEAD - это указатель на текущий коммит.
HEAD всегда указывает на последний коммит из вашего локального дерева. Большинство команд Git, изменяющих рабочее дерево, начнут с изменения HEAD. Обычно HEAD указывает на имя ветки (например, bugFix). Когда вы делаете коммит, статус ветки bugFix меняется и это изменение видно через HEAD.

Отделение (detaching) HEAD означает лишь присвоение его не ветке, а конкретному коммиту.

Переход по хешу

git checkout fa012b

Относительный переход

Переход на коммит предка (на коммит назад)

git checkout master^
git checkout HEAD^

Переход на n-шагов назад

git checkout HEAD~4

Перенос ветки

Т.к. ветка явялется лишь указателем на коммит (с историей коммитов), ее можно перенести на др. коммит:

git branch -f master HEAD~3

В данном примере преместить ветку мастре на три шага назад от HEAD.

Отмена изменений

git reset
git reset отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода "переписывание истории"; git reset перенесёт ветку назад, как будто некоторых коммитов вовсе и не было.

git reset HEAD~1

Reset отлично работает на локальных ветках, в локальных репозиториях. Но этот метод переписывания истории не сработает на удалённых ветках, которые используют другие пользователи.
Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать git revert.

git revert

В отличие от reset, revert создает новый коммит с прошлыми изменениями.

git revert HEAD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment