Что делает команда git checkout? - коротко
Команда git checkout переключает рабочий каталог и индекс на указанную ветку, коммит или отдельный файл. Она также позволяет восстановить из истории конкретные файлы или отменить изменения.
Что делает команда git checkout? - развернуто
Git checkout — это основной инструмент, позволяющий управлять тем, какие файлы находятся в рабочем каталоге и какая ветка считается текущей. При выполнении команды Git меняет указатель HEAD, обновляет индекс и при необходимости перезаписывает файлы в рабочем дереве, подгоняя их под состояние выбранного коммита или ветки.
Когда вы указываете имя ветки, например git checkout feature
, Git проверяет, существует ли такая ветка в репозитории. Если ветка найдена, указатель HEAD перемещается на её последний коммит, индекс заполняется содержимым этого коммита, а файлы в рабочем каталоге заменяются версиями из ветки. После этого все новые изменения будут фиксироваться в выбранной ветке, пока вы не переключитесь на другую.
Если вместо ветки указать конкретный коммит (SHA‑1) или тег, Git переходит в «отсоединённое состояние» — HEAD указывает непосредственно на указанный объект, а не на ветку. В этом режиме можно исследовать код, собрать артефакты или выполнить тесты, но любые новые коммиты будут «висячими» и не привязанными к именованной ветке, пока их явно не привязать.
Команда также умеет восстанавливать отдельные файлы или каталоги до состояния, зафиксированного в другом коммите. Выражение git checkout HEAD~2 -- src/main.c
заменит текущую версию src/main.c
на версию из двух коммитов назад, оставив остальные файлы нетронутыми. Это удобно для отмены случайных изменений без отката всего проекта.
Создание новой ветки в один шаг достигается флагом -b
: git checkout -b hotfix
. Git одновременно создаёт ветку hotfix
от текущего коммита и переключает на неё. Аналогично, флаг -B
принудительно пересоздаёт ветку, даже если она уже существует, заменяя её указателем на указанный коммит.
При переключении Git проверяет, есть ли в рабочем каталоге несохранённые изменения, которые могут конфликтовать с целевым состоянием. Если обнаружены такие конфликты, команда прервёт процесс и сообщит о необходимости либо зафиксировать текущие изменения, либо отложить их с помощью git stash
. Это предохраняет от потери работы и гарантирует целостность репозитория.
Итоги работы git checkout
:
- перемещает указатель HEAD на выбранную ветку, тег или коммит;
- синхронно обновляет индекс и рабочее дерево, приводя их к состоянию целевого объекта;
- позволяет создавать и сразу переключаться на новые ветки (
-b
,-B
); - восстанавливает отдельные файлы из любого коммита;
- защищает от конфликтов, проверяя наличие локальных изменений.
Таким образом, git checkout
управляет тем, какой набор изменений виден в вашем рабочем каталоге, и определяет, куда будут направлены будущие коммиты. Это фундаментальная команда для навигации по истории проекта и организации параллельных линий разработки.