gitでブランチ(branch)を切り替える方法

gitでブランチ(branch)を切り替える方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Gitで開発を進めていると、機能追加やバグ修正のために複数のブランチを使い分ける場面が頻繁にあります。ブランチとは、メインの開発ラインから分岐した独立した作業領域のことで、ブランチを切り替えることによって異なる作業内容に素早くアクセスできます。

しかし、切り替えに使うコマンドにはgit switchとgit checkoutの2種類があり、どちらを使えばよいのか迷う方も多いです。また、新しいブランチを作成しながら切り替える方法も知っておくと、作業効率が大きく向上します。

この記事では、gitでブランチを切り替える具体的なコマンドと、変更が競合する場合の対処法について解説していきます。



gitでブランチを切り替えるコマンド

gitでブランチを切り替えるには、git switchコマンドまたはgit checkoutコマンドを使用します。git switchはGit 2.23で導入された新しいコマンドで、ブランチ切り替え専用に設計されています。

ブランチの切り替え方法として、以下の3つがあります。

  1. git switchで切り替える
  2. git checkoutで切り替える
  3. ブランチを新規作成して切り替える

それぞれのコマンドには異なる特徴があり、git switchはブランチ操作に特化しているため誤操作のリスクが低く、git checkoutはファイル復元など複数の機能を兼ねています。

それでは各項目について、詳しく解説していきます。

git switchで切り替える

git switchは、Git 2.23以降で使用できるブランチ切り替え専用のコマンドです。git checkoutが持っていた複数の機能を分割する形で導入され、ブランチの切り替え操作だけに特化しています。

git switch ブランチ名

上記のコマンドを実行すると、指定したブランチに作業ディレクトリが切り替わります。たとえば、featureブランチに切り替える場合は以下のように記述します。

git switch feature

切り替えが成功したかどうかは、git branch --show-currentコマンドで現在のブランチ名を確認できます。ターミナルの設定によってはプロンプトにブランチ名が表示される場合もあります。

Git公式ドキュメントでは、git switchの動作について以下のように説明されています。

Switch to a specified branch. The working tree and the index are updated to match the branch. All new commits will be added to the tip of this branch.

出典:Git公式ドキュメント - git-switch

git switchはgit checkoutと比べてファイル復元用途との混同がないため、ブランチ切り替えの意図が明確になりやすいコマンドです。Git 2.23以降の環境であれば、ブランチ切り替えにはgit switchを使用するのが一般的です。

git checkoutで切り替える

git checkoutは、Git 2.23より前から存在する従来のブランチ切り替えコマンドです。現在でも問題なく使用できますが、ブランチ切り替えとファイル復元の両方の機能を持つため、git switchと比べて操作の意図が曖昧になりやすいという特徴があります。

git checkout ブランチ名

たとえば、mainブランチに切り替える場合は以下のように記述します。

git checkout main

git checkoutでもgit switchと同じくブランチの切り替えが実行されます。ただし、git checkoutはブランチ切り替えとファイル復元の両方を担うため、引数の解釈が曖昧になる場合があります。

たとえばdocsという名前のブランチとファイルが両方存在する場合、git checkoutはどちらの操作を意図しているか判別できないことがあります。このような曖昧さを避けるためにも、ブランチ切り替えにはgit switchを使用するのが確実です。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

ブランチを新規作成して切り替える

新しいブランチを作成すると同時に、そのブランチに切り替えることもできます。git switchでは-cオプション、git checkoutでは-bオプションを使用します。

# git switchの場合
git switch -c 新しいブランチ名

# git checkoutの場合
git checkout -b 新しいブランチ名

たとえば、hotfixという名前の新しいブランチを作成して切り替える場合は、以下のように記述します。

git switch -c hotfix

上記のコマンドを実行すると、現在のブランチの状態をベースにhotfixブランチが新規作成され、自動的にそのブランチへ切り替わります。Git公式ドキュメントでは、git switch -cについて以下のように説明されています。

Create a new branch named <new-branch> starting at <start-point> before switching to the branch.

出典:Git公式ドキュメント - git-switch

git branchコマンドでブランチを作成してからgit switchで切り替える2段階の操作を、1つのコマンドで完了できるため効率的です。

gitのブランチ切り替えで変更が競合する場合の対処法

gitでブランチを切り替えようとした際に、作業ディレクトリに未コミットの変更がある場合、切り替え先のブランチの内容と衝突するとエラーが発生して切り替えがブロックされます。表示されるメッセージはコマンドや環境によって異なりますが、変更のコミットまたはstashを求められます。

この場合、以下の2つの方法で対処できます。

  1. git stashで変更を一時退避する
  2. 変更をコミットしてから切り替える

それぞれの方法には適した場面があり、git stashは作業途中の変更を一時的に保存したい場合に、コミットは区切りのよい変更を確定させたい場合に使用します。

それでは各項目について、詳しく解説していきます。

git stashで変更を一時退避する

git stashは、作業ディレクトリの未コミットの変更を一時的に退避するコマンドです。スタッシュとは「一時保存領域」を意味し、退避した変更は後から復元できるため、作業途中の状態を失わずにブランチを切り替えられます。

なお、git stashはデフォルトでは未追跡ファイル(新規作成したファイル)を退避しません。未追跡ファイルも含めて退避したい場合はgit stash -uを使用してください。

# 変更を一時退避する
git stash

# ブランチを切り替える
git switch feature

# 切り替え先で作業後、元のブランチに戻る
git switch main

# 退避した変更を復元する
git stash pop

上記のコマンドでは、まずgit stashで現在の変更を退避し、ブランチ切り替え後に別ブランチで作業を行い、元のブランチに戻ってからgit stash popで変更を復元しています。git stash popは退避した変更を復元すると同時にスタッシュから削除しますが、復元時にコンフリクトが発生した場合はスタッシュが削除されずに残ります。

復元せずにスタッシュに残しておきたい場合は、git stash applyを使用してください。

変更をコミットしてから切り替える

作業中の変更がある程度まとまっている場合は、コミットしてからブランチを切り替える方法が最もシンプルです。コミットとは、変更内容をGitの履歴として確定させる操作のことで、コミット後は作業ディレクトリがクリーンな状態になるため、未コミットの変更による切り替えブロックを回避できます。

# 変更をステージングする
git add .

# コミットする
git commit -m "作業中の変更を保存"

# ブランチを切り替える
git switch feature

上記のコマンドでは、git addで変更をステージングエリアに追加し、git commitで履歴に記録した後にブランチを切り替えています。ステージングエリアとは、次のコミットに含める変更を選択するための準備領域のことです。

なお、git add .はカレントディレクトリ配下の全変更をステージングするため、意図しないファイルまで含めてしまう場合があります。対象ファイルを明示してgit add ファイル名とする方が安全です。

また、まだ完成していない中途半端な状態でコミットすると、後からコミット履歴が煩雑になる可能性があるため、作業の区切りがよいタイミングでの使用が適しています。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

gitのブランチ切り替えに関するよくある質問

git switchとgit checkoutはどちらを使うべきですか?

Git 2.23以降の環境であればgit switchが一般的です。git switchはブランチ操作に用途が絞られているため、ファイル復元との混同が起きません。

判断基準 使うコマンド
Git 2.23以降 git switch
Git 2.23未満 git checkout

既存のスクリプトやCI設定でgit checkoutが使われている場合は、無理に書き換える必要はありません。

存在しないブランチに切り替えようとするとどうなりますか?

ローカルに存在しないブランチ名を指定した場合、通常はエラーが表示されて切り替えは実行されません。ただし、リモートに同名ブランチが存在する場合は自動的にローカルブランチが作成されることがあります(詳しくは次の質問を参照してください)。

状況 結果
ローカル・リモート共になし エラーで切り替え失敗
リモートに1つだけ存在 自動作成して切り替え成功

ブランチの一覧を確認するには、ローカルはgit branch、リモートを含む全一覧はgit branch -aを実行してください。

リモートブランチに切り替えるにはどうすればよいですか?

リモートリポジトリにのみ存在するブランチに切り替える場合は、まずgit fetchでリモートの最新情報を取得してからgit switchを実行します。リモートリポジトリとは、GitHubやGitLabなどのサーバー上に配置された共有リポジトリのことです。

git fetch origin
git switch リモートブランチ名

git switchは、ローカルに同名のブランチが存在せず、リモート追跡ブランチが1つのリモートにのみ存在する場合、自動的にローカルブランチを作成して切り替えます。リモート追跡ブランチとは、リモートリポジトリ上のブランチの状態をローカルに記録した参照のことで、origin/mainのような形式で管理されています。

複数のリモートに同名ブランチがある場合はエラーになるため、git switch -c feature origin/featureのように明示的に指定してください。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する