Git Switch против Git Checkout

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы узнаете об основных различиях между командами git switch и git checkout. Вы изучите, когда и почему следует использовать каждую команду, а также практические примеры и варианты использования, которые помогут вам оптимизировать рабочий процесс Git.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-391555{{"Git Switch против Git Checkout"}} git/branch -.-> lab-391555{{"Git Switch против Git Checkout"}} git/checkout -.-> lab-391555{{"Git Switch против Git Checkout"}} end

Понимание Git Checkout

Команда git checkout — это фундаментальная команда Git, используемая для переключения между ветками или восстановления файлов рабочего дерева (working tree). Она обновляет файлы в вашем рабочем каталоге, чтобы они соответствовали версии в указанной ветке или коммите (commit).

Давайте начнем с изучения того, как использовать git checkout для переключения между ветками.

Сначала убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Теперь давайте проверим текущую ветку. По умолчанию, после git init, вы находитесь в ветке main или master (в зависимости от вашей конфигурации Git). В настройках этой лабораторной работы мы создали feature-branch.

git branch

Вы должны увидеть вывод, похожий на этот, указывающий текущую ветку звездочкой:

  feature-branch
* main

Теперь используйте git checkout для переключения на feature-branch:

git checkout feature-branch

Вы увидите вывод, подтверждающий переключение:

Switched to branch 'feature-branch'

Давайте снова проверим текущую ветку:

git branch

Теперь вывод должен показать, что вы находитесь на feature-branch:

* feature-branch
  main

Вы успешно использовали git checkout для переключения между ветками.

Понимание Git Switch

Команда git switch — это более новая команда, представленная в Git 2.23, специально разработанная для переключения между ветками. Она направлена на обеспечение более четкого разделения задач по сравнению с перегруженной командой git checkout.

Давайте используем git switch, чтобы переключиться обратно на ветку main.

Убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Теперь используйте git switch для переключения на ветку main:

git switch main

Вы увидите вывод, подтверждающий переключение:

Switched to branch 'main'

Давайте снова проверим текущую ветку:

git branch

Теперь вывод должен показать, что вы находитесь на main:

* main
  feature-branch

Вы успешно использовали git switch для переключения между ветками. Обратите внимание, что вывод аналогичен git checkout при переключении между ветками.

Создание и переключение веток с помощью Git Switch

Одной из удобных функций git switch является возможность создать новую ветку и переключиться на нее одной командой, используя опцию -c (или --create).

Давайте создадим новую ветку под названием development и переключимся на нее.

Убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Теперь используйте git switch -c для создания и переключения на ветку development:

git switch -c development

Вы увидите вывод, указывающий на то, что новая ветка была создана и вы переключились на нее:

Switched to a new branch 'development'

Давайте проверим текущую ветку и перечислим все ветки:

git branch

Вывод должен показать новую ветку development и указать, что вы в данный момент находитесь на ней:

  feature-branch
  main
* development

Это демонстрирует, как git switch -c упрощает процесс создания и немедленной работы над новой веткой.

Восстановление файлов с помощью Git Checkout

В то время как git switch в основном предназначен для переключения между ветками, git checkout сохраняет функциональность восстановления файлов. Это ключевое различие в их предполагаемом использовании.

Давайте внесем изменения в file1.txt, а затем используем git checkout, чтобы отменить изменения и восстановить файл до его состояния в текущей ветке (development).

Убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Добавьте некоторый контент в file1.txt:

echo "Additional content" >> file1.txt

Проверьте статус файла:

git status

Вывод покажет, что file1.txt был изменен:

On branch development
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Теперь используйте git checkout -- для отмены локальных изменений в file1.txt:

git checkout -- file1.txt

Снова проверьте статус:

git status

Вывод теперь должен показать, что в рабочем каталоге нет изменений:

On branch development
nothing to commit, working tree clean

Изменения, внесенные вами в file1.txt, были отменены, и файл был восстановлен до своего состояния в ветке development. Эта функциональность обрабатывается командой git checkout, а не git switch.

Просмотр определенного коммита с помощью Git Checkout

Еще одна функциональность, сохраненная git checkout, - это возможность просмотра (checking out) определенного коммита. Это переводит вас в состояние "detached HEAD" (отсоединенной HEAD), позволяя вам изучить проект в этот момент истории. git switch не обладает этой возможностью.

Сначала давайте найдем хеш коммита (commit hash) начального коммита (initial commit).

Убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Просмотрите историю коммитов:

git log --oneline

Вы увидите вывод, подобный этому, с хешами коммитов:

<commit_hash_development> (HEAD -> development) Initial commit
<commit_hash_main> (main, feature-branch) Initial commit

Обратите внимание, что хеши коммитов будут отличаться в вашей среде. Скопируйте хеш коммита для "Initial commit".

Теперь используйте git checkout, за которым следует хеш коммита, чтобы просмотреть этот конкретный коммит. Замените <commit_hash> фактическим скопированным вами хешем.

git checkout <commit_hash>

Вы увидите вывод, указывающий на то, что вы находитесь в состоянии detached HEAD:

Note: switching to '<commit_hash>'

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 switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

HEAD is now at <commit_hash> Initial commit

Теперь вы просматриваете проект таким, каким он был во время начального коммита. Чтобы вернуться к ветке, вы можете использовать git switch или git checkout, чтобы переключиться обратно на ветку, такую как development или main.

Давайте вернемся к ветке development с помощью git switch:

git switch development

Вы увидите вывод, подтверждающий переключение:

Switched to branch 'development'

Вы успешно использовали git checkout для изучения конкретного коммита, а затем вернулись к ветке с помощью git switch.

Краткое изложение различий

Подводя итог ключевым различиям между git checkout и git switch:

  • git switch: В основном используется для переключения между ветками. Это более новая, более целенаправленная команда для этой конкретной задачи. Она также может создать новую ветку и переключиться на нее (git switch -c).
  • git checkout: Более универсальная команда, которая может переключать ветки, но также имеет возможность просматривать (check out) определенные коммиты (что приводит к состоянию detached HEAD) и восстанавливать файлы (git checkout -- <file>).

Хотя git checkout может выполнять переключение веток, git switch является рекомендуемой командой для этой цели в более новых версиях Git из-за ее более четкого намерения и разделения задач (separation of concerns). Используйте git checkout, когда вам нужно восстановить файлы или изучить конкретные коммиты.

Теперь вы изучили основные функциональные возможности как git checkout, так и git switch и понимаете, когда использовать каждую команду в своем рабочем процессе Git (Git workflow).

Итог

В этой лабораторной работе вы узнали о различиях между командами git switch и git checkout. Вы попрактиковались в переключении между ветками с помощью обеих команд, создании новой ветки с помощью git switch, восстановлении файлов с помощью git checkout и просмотре (checking out) определенного коммита с помощью git checkout. Теперь вы понимаете предполагаемые варианты использования для каждой команды и то, как они способствуют эффективному рабочему процессу Git (Git workflow).