はじめに
この実験(Lab)では、git switch
コマンドと git checkout
コマンドの主な違いを学びます。それぞれのコマンドをいつ、なぜ使用するのかを、実践的な例とユースケースとともに探求し、Git ワークフローを効率化するのに役立てます。
この実験(Lab)では、git switch
コマンドと git checkout
コマンドの主な違いを学びます。それぞれのコマンドをいつ、なぜ使用するのかを、実践的な例とユースケースとともに探求し、Git ワークフローを効率化するのに役立てます。
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 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
の便利な機能の 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 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
によって保持されているもう 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
を使用して、development
や main
などのブランチに切り替えることができます。
git switch
を使用して development
ブランチに戻りましょう。
git switch development
切り替えを確認する出力が表示されます。
Switched to branch 'development'
git checkout
を使用して特定のコミットを探索し、git switch
を使用してブランチに戻ることができました。
git checkout
と git switch
の主な相違点をまとめると、次のようになります。
git switch
: 主にブランチ間の切り替えに使用されます。これは、この特定のタスクのためのより新しく、より焦点を絞ったコマンドです。新しいブランチを作成して切り替えることもできます (git switch -c
)。git checkout
: より汎用性の高いコマンドで、ブランチを切り替えることができますが、特定のコミットをチェックアウト(detached HEAD(デタッチドヘッド)になる)したり、ファイルを復元(git checkout -- <file>
)したりすることもできます。git checkout
はブランチの切り替えを実行できますが、より明確な意図と関心の分離により、新しいバージョンの Git ではこの目的のために git switch
が推奨されるコマンドです。ファイルを復元したり、特定のコミットを調べたりする必要がある場合は、git checkout
を使用してください。
これで、git checkout
と git switch
の両方のコア機能を調べ、Git ワークフローで各コマンドをいつ使用するかを理解できました。
この実験(Lab)では、git switch
コマンドと git checkout
コマンドの違いを学びました。両方のコマンドを使用してブランチを切り替えたり、git switch
で新しいブランチを作成したり、git checkout
でファイルを復元したり、git checkout
で特定のコミットをチェックアウトしたりする練習をしました。これで、各コマンドの意図されたユースケースと、それらが効率的な Git ワークフローにどのように貢献するかを理解できました。