Что делает команда git checkout?

Что делает команда 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 управляет тем, какой набор изменений виден в вашем рабочем каталоге, и определяет, куда будут направлены будущие коммиты. Это фундаментальная команда для навигации по истории проекта и организации параллельных линий разработки.