Git Switch vs Git Checkout

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験(Lab)では、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 vs Git Checkout"}} git/branch -.-> lab-391555{{"Git Switch vs Git Checkout"}} git/checkout -.-> lab-391555{{"Git Switch vs Git Checkout"}} end

Git Checkout の理解

git checkout コマンドは、ブランチの切り替えやワーキングツリーのファイルの復元に使用される基本的な Git コマンドです。ワーキングディレクトリ内のファイルを、指定されたブランチまたはコミットのバージョンと一致するように更新します。

まず、git checkout を使用してブランチを切り替える方法を見ていきましょう。

最初に、プロジェクトディレクトリにいることを確認してください。

cd ~/project

次に、現在のブランチを確認しましょう。デフォルトでは、git init 後、main または master ブランチにいます (Git の設定によって異なります)。この実験(Lab)のセットアップでは、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'

現在のブランチを再度確認しましょう。

* main
  feature-branch

main にいることが表示されるはずです。

git switch を使用してブランチを切り替えることができました。ブランチを切り替える際の出力が git checkout と似ていることに注目してください。

Git Switch を使用したブランチの作成と切り替え

git switch の便利な機能の 1 つは、-c (または --create) オプションを使用して、新しいブランチを作成し、それを 1 つのコマンドで切り替えることができることです。

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 switch ではなく、git checkout によって処理されます。

Git Checkout を使用した特定のコミットのチェックアウト

git checkout によって保持されているもう 1 つの機能は、特定のコミットをチェックアウトする機能です。これにより、「detached HEAD(デタッチドヘッド)」状態になり、その時点でのプロジェクトを検査できます。git switch にはこの機能はありません。

まず、最初のコミットのコミットハッシュを見つけましょう。

プロジェクトディレクトリにいることを確認してください。

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 を使用して、developmentmain などのブランチに切り替えることができます。

git switch を使用して development ブランチに戻りましょう。

git switch development

切り替えを確認する出力が表示されます。

Switched to branch 'development'

git checkout を使用して特定のコミットを探索し、git switch を使用してブランチに戻ることができました。

相違点のまとめ

git checkoutgit switch の主な相違点をまとめると、次のようになります。

  • git switch: 主にブランチ間の切り替えに使用されます。これは、この特定のタスクのためのより新しく、より焦点を絞ったコマンドです。新しいブランチを作成して切り替えることもできます (git switch -c)。
  • git checkout: より汎用性の高いコマンドで、ブランチを切り替えることができますが、特定のコミットをチェックアウト(detached HEAD(デタッチドヘッド)になる)したり、ファイルを復元(git checkout -- <file>)したりすることもできます。

git checkout はブランチの切り替えを実行できますが、より明確な意図と関心の分離により、新しいバージョンの Git ではこの目的のために git switch が推奨されるコマンドです。ファイルを復元したり、特定のコミットを調べたりする必要がある場合は、git checkout を使用してください。

これで、git checkoutgit switch の両方のコア機能を調べ、Git ワークフローで各コマンドをいつ使用するかを理解できました。

まとめ

この実験(Lab)では、git switch コマンドと git checkout コマンドの違いを学びました。両方のコマンドを使用してブランチを切り替えたり、git switch で新しいブランチを作成したり、git checkout でファイルを復元したり、git checkout で特定のコミットをチェックアウトしたりする練習をしました。これで、各コマンドの意図されたユースケースと、それらが効率的な Git ワークフローにどのように貢献するかを理解できました。