Git

【Git】ブランチ切り替えはcheckoutではなくswitchを使おう!

ブランチを切り替える方法を知りたい!

読者

ブランチ切り替えには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と同じような使い方ができ、学習コストもほとんどかからないので積極的に使っていきたいコマンドです!

ぜひ、これを機に使ってみてはいかがでしょうか?

最後までお読みいただきありがとうございました!

-Git