ブランチを切り替える方法を知りたい!
ブランチ切り替えにはswitchいいと聞いたけど、どうやって使うの?
今までブランチ切り替えはgit checkout <ブランチ名>
が使われることが多かったと思います。
しかし、このcheckout
コマンドでできることはブランチ切り替えだけでなく、変更の取り消しや過去ファイルの復元など様々な用途で使われてきました。
同じコマンドなのにできることが違うというのは何とも直感的ではないですよね。
そのため、現在ではブランチ切り替えなどのブランチ操作専用のswitch
というコマンドが用意されています。
本記事では、このswitch
の使い方をcheckout
と比較しながら解説していきます。
使い方はcheckout
とそれほど変わらずとても簡単なので、ブランチ切り替えにcheckout
を使っていた方は是非参考にしてみてください!
この記事で分かること
- switchコマンドとは
- switchでブランチを切り替える方法
switchコマンドとは
checkoutコマンドからブランチ操作に関わる機能を切り出したものがswitch
コマンドです。
元々ブランチ切り替えにはcheckout
コマンドが使われていましたが、checkout
コマンドはブランチ操作以外にもファイル操作をする機能も持ち合わせています。
1つのコマンドで別の種類の操作をできてしまうのは何とも直感的ではなく分かりにくいですよね。
その問題を解消するため、2019年のGit 2.23のリリースでcheckoutコマンドの機能を分割する形でswitchコマンドとrestoreコマンドが新たに実装されました。
switchコマンドはブランチ操作を、restoreコマンドはファイル操作を担当しています。
このようにブランチ操作用に新たにコマンドが用意されているので、ブランチ操作をする際はこのswitch
コマンドを使うことをおすすめします!
switchでブランチを切り替える方法
前述の通りswitch
コマンドはcheckout
コマンドから切り出されたコマンドなので、使い方はほとんど一緒です!
とはいえ若干違うところもあるので、checkout
の場合と比較しながら見ていきましょう。
既存ブランチへ切り替える
switch
でブランチを切り替えるときは次のようなコマンドを使います。
git switch <ブランチ名>
例】main
ブランチから既存のdevelop
ブランチへ切り替えたいとき場合
$ git branch
develop
* main
$ git switch develop
Switched to branch 'develop'
// checkoutの場合
$ git checkout develop
Switched to branch 'develop'
checkoutコマンドと同じ使い方ですね!
新規ブランチを作成して切り替える
switch
で新しいブランチを作成し、そのブランチへ切り替えるには-cオプションを指定します。
-c
オプションは指定したブランチが存在しない場合、ブランチを新たに作成して切り替えてくれます。
git switch -c <ブランチ名>
例】main
ブランチからtest
ブランチを新た作成し切り替えたい場合
$ git branch
develop
* main
$ git switch -c test
Switched to a new branch 'test'
// checkoutの場合
$ git checkout -b test
Switched to a new branch 'test'
オプションは変更されましたが、ほとんど変わりませんね!
ただし、このオプションは指定したブランチ名と同名のブランチが既ある場合、以下のようにエラーが発生してしまいます。
$ git switch -c test
fatal: A branch named 'test' already exists.
もしそのブランチを上書きしたいのであれば-C
(大文字)オプションを使用すると解消できます。
-Cオプションは、指定したブランチ名が既に存在しても強制的にブランチを上書きして作成します。
git switch -C <ブランチ名>
$ git switch -C test
Switched to and reset branch 'test'
// checkoutの場合
$ git checkout -B test
Switched to and reset branch 'test'
リモートブランチをローカルに作成し切り替える
新規ブランチに切り替えたい場合は基本的に-cオプションを使いますが、既にリモートに同名のブランチが存在する場合はオプションは不要となります。
// 必要に応じてリモートブランチの情報を取得する
git fetch --all
// ローカルブランチを切ってブランチを切り替える
$ git switch <対象のリモートブランチ名>
例】リモートのみにtest
ブランチがある状態で、ローカルにリモートtest
ブランチと同様のブランチを切って切り替える場合
// リモートブランチの情報を取得
$ git fetch --all
// ローカルブランチを切ってブランチを切り替える
$ git switch test
M test1.txt
branch 'test' set up to track 'origin/test'.
Switched to a new branch 'test'
// checkoutの場合
$ git checkout test
M test1.txt
branch 'test' set up to track 'origin/test'.
Switched to a new branch 'test'
これも使い方は同じですね!
一時的に過去のコミットに移動する
switch
で過去のコミットを移動するには-dオプションを使用します。
コマンドは次のような形です。
$ git switch -d <コミットID or HEAD表記>
例】以下のようなコミットログで、commit2に移動したい場合
$ git log --oneline
9cd33ed (HEAD -> main) commit4
680cded commit3
755ffb0 commit2
404c4dc commit1
0f36277 initial commit
$ git switch -d 755ffb0
HEAD is now at 755ffb0 first commit
// checkoutの場合
$ git checkout 755ffb0
Note: switching to '755ffb0'.
・
・
・
HEAD is now at 755ffb0 commit2
checkoutはオプション不要でしたが、switchの場合は-dオプションが必要です!
まとめ
今回はswitchコマンドを使用してブランチ切り替えをする方法について解説してきました。
switchコマンドはcheckoutコマンドからブランチ操作に関する機能を切り出したコマンドでした。
そのため基本的にcheckoutと同じような使い方ができ、学習コストもほとんどかからないので積極的に使っていきたいコマンドです!
ぜひ、これを機に使ってみてはいかがでしょうか?
最後までお読みいただきありがとうございました!