【Git】新しいブランチを作成する基本的な手順|switch -c・checkout -b・命名規則・初回pushまで完全ガイド

【Git】新しいブランチを作成する基本的な手順 Git

Gitで何かしら作業を始めるとき、いきなりmainブランチで開発するのではなくfeature用のブランチを切ってから作業するのが基本です。こうすることでmainを常に動く状態に保ち、複数の作業を並列で進められ、レビューとマージのサイクルを回せます。

この記事では、Gitで新しいブランチを作成する基本手順を、現代の推奨コマンド(git switch -c)とレガシー(git checkout -b)の両方で解説します。作成から初回push・upstream設定、命名規則(Git Flow/GitHub Flow)、GUI操作、作業中の変更がある場合の扱いまで、「とりあえずブランチを作って動ける」をゴールに体系化しました。

この記事で学べること

  • Gitの「ブランチ」の正体と役割
  • git switch -c(推奨)とgit checkout -b(旧)の違い
  • 基本3パターン:HEADから/SHAから/リモート追跡から作成
  • 初回pushと-uによるupstream追跡設定
  • ブランチ名の命名規則とチーム運用(Git Flow/GitHub Flow)
  • VS Code・JetBrains・GitHub DesktopでのGUI作成
  • 作業中の変更がある状態でのブランチ作成パターン
スポンサーリンク

ブランチとは何か

Gitの「ブランチ」は特定のコミットを指す軽量なラベルです。「枝分かれ」という言葉からディレクトリの複製や大掛かりな仕組みを想像しがちですが、内部的には.git/refs/heads/ブランチ名に40文字のSHAが書かれた小さなファイルがあるだけ。作成コストはほぼゼロなので、気軽に何本でも作って使い捨てできます。

ブランチの実体を覗いてみる
# すべてのブランチ一覧
git branch

# ブランチの実体ファイル
ls .git/refs/heads/
cat .git/refs/heads/main
# → 40文字のSHA

# HEADの向き先を確認
cat .git/HEAD
# → ref: refs/heads/main

ポイント:ブランチは「コミットへのポインタ」なので、作成もリネームも削除も高速です。「ブランチを作るのはコストが高そう」と感じてmainで直接作業するクセがあるなら、この機会に考え方を切り替えましょう。1つの作業につき1つのブランチが基本です。

STEP 1:今どのブランチにいるかを確認する

新しいブランチを作る前に、自分が今どこにいるか確認します。誤って壊したくないブランチ上で新規作業を始める事故を防ぎます。

現在ブランチの確認
# ローカルブランチ一覧と現在ブランチ(*印)
git branch
# 出力例:
# * main
#   feature/old-work

# 現在ブランチ名だけ
git branch --show-current

# リモート追跡情報付き
git branch -vv

# 現状を一目で俯瞰
git status -sb
# 出力例: ## main...origin/main

作業前に確認したいこと

STEP 2:ブランチを作成&切り替える(推奨:switch -c)

Git 2.23以降はgit switch -cが推奨コマンドです。「Create the new branch and switch to it」で、作成と切り替えを1コマンドで完了します。

git switch -c の基本
# 現在ブランチを派生元にして新ブランチを作成&切替
git switch -c feature/login

# 別ブランチを派生元にする場合
git switch -c feature/login main

# リモート追跡ブランチを派生元にする
git fetch origin
git switch -c feature/login origin/main

# 同名ブランチがあった場合は強制上書き(注意)
git switch -C feature/login    # 大文字Cで強制

# 作成だけして切り替えない(稀)
git branch feature/login

ポイント:-cは「create」の意味です。小文字-cは安全(同名ブランチがあれば拒否)、大文字-Cは強制上書きで危険度が一段上がります。基本は-c、既存ブランチを上書きする意図が明確な場合のみ-Cを使いましょう。

旧コマンド:checkout -b でも同じことができる

Git 2.23より前の環境や、既存スクリプト・手順書ではgit checkout -bが使われています。機能的にはswitch -cと同等ですが、checkoutはブランチ切替+ファイル復元+作成まで兼ねる多機能コマンドで、誤用事故が起きやすいため新しく覚えるならswitchが推奨です。

git checkout -b
# 新ブランチを作成&切替
git checkout -b feature/login

# 派生元を指定
git checkout -b feature/login main
git checkout -b feature/login origin/main

# 強制上書き
git checkout -B feature/login
やりたいこと 推奨(新) 旧コマンド
ブランチ作成+切替 git switch -c X git checkout -b X
作成のみ(切替なし) git branch X git branch X
既存ブランチに切り替え git switch X git checkout X
強制上書き作成 git switch -C X git checkout -B X

STEP 3:リモートに公開する(初回push+upstream設定)

ブランチを作ってコミットを積んだら、リモートに公開してチームと共有します。初回は-u--set-upstream)を付けて追跡先を設定するのが鉄則。以降はgit pushgit pullだけでリモートと同期できるようになります。

初回 push と upstream 設定
# ブランチを作って作業して初コミット
git switch -c feature/login
vim src/auth.py
git add src/auth.py
git commit -m "feat: ログイン機能の雛形"

# 初回push(upstream 同時設定)
git push -u origin feature/login
# 出力: Branch 'feature/login' set up to track remote branch 'feature/login' from 'origin'.

# 次回以降はこれだけでOK
git push

# upstream を確認
git branch -vv

-u を忘れるとどうなるか

  • 次回push時にfatal: The current branch has no upstream branch.と出る
  • 明示的にgit push origin feature/loginと打つ必要がある
  • 後から設定するならgit branch -u origin/feature/loginまたはgit push -u origin feature/login
  • push.autoSetupRemote = true設定で自動化も可能(Git 2.37+)
自動upstream設定
# 新ブランチのpush時に -u を自動付与
git config --global push.autoSetupRemote true

upstreamの概念詳細はoriginとupstreamの違いと使い分け完全ガイド、リモート状態の確認はリモートブランチを確認する方法を参照してください。

リモート追跡ブランチから作成する(他メンバーのブランチに入る)

他メンバーがpushしたブランチをローカルで作業するには、リモート追跡ブランチ(origin/xxx)から新ローカルブランチを作ります。Git 2.23以降はgit switchが賢く判断してくれます。

リモートからローカルブランチを作る
# 最新情報を取得
git fetch --all --prune

# シンプルな方法(Git 2.23+):同名のリモートがあれば自動トラック
git switch feature/review-me
# → origin/feature/review-me を追跡するローカルブランチを自動作成

# 明示的に作るなら
git switch -c feature/review-me origin/feature/review-me

# 旧コマンド
git checkout -b feature/review-me origin/feature/review-me
# または短縮記法
git checkout --track origin/feature/review-me

ポイント:Git 2.23以降はgit switch BRANCHで同名のリモート追跡があれば自動的にトラックブランチを作ってくれます。昔のgit checkout -b X origin/Xは不要なケースが多いので、新しいGitを使っているならgit switch BRANCHだけで覚えれば十分です。

ブランチ命名規則とチーム運用

ブランチ名は目的が一目で分かるプレフィックスを付けるとチーム運用しやすくなります。代表的なのはGit FlowやGitHub Flowの規約です。

主要なプレフィックス

  • feature/xxx:新機能開発(最頻出)
  • fix/xxxbugfix/xxx:通常のバグ修正
  • hotfix/xxx:本番緊急修正
  • release/x.y.z:リリース準備用
  • chore/xxx:設定/CI/雑務
  • refactor/xxx:リファクタリング
  • docs/xxx:ドキュメント更新
  • experiment/xxxspike/xxx:検証用の使い捨て

Issue番号を含める

Issue駆動の命名
# Issue番号を含めると対応関係が追いやすい
git switch -c feature/123-add-user-settings
git switch -c fix/456-login-validation

# プレフィックス+Issue番号+概要 が定番

注意:ブランチ名に使えない文字があります。スペース・コロン・アスタリスク・疑問符・チルダ・キャレットなどはfatal: 'xxx' is not a valid branch nameエラーになります。/は許可されますが階層扱いになるため、同名ブランチとディレクトリ的に重複するとエラーが出るケースもあります。

Git Flow と GitHub Flow

モデル ブランチ構成 特徴
Git Flow main/develop/feature/release/hotfix 段階的リリースに強い。構造が複雑
GitHub Flow main/feature only シンプル。CI/CDと相性良い
Trunk-based mainに直結の短命ブランチ 小規模・頻繁マージチームに最適

未コミット変更がある状態でブランチを作る

「ちょっとmainで作業したけど、よく考えたらブランチ切ってからやるべきだった」というパターンの対処法です。

作業ツリーの変更を持ったままブランチを切る
# A: 変更内容ごとブランチに持っていく
# 未addの変更は新ブランチに引き継がれる
git switch -c feature/my-work
git add .
git commit -m "feat: 作業内容"

# B: 作業をstashしてから別ブランチで続ける
git stash push -m "wip: mainでの作業"
git switch -c feature/my-work
git stash pop

# C: mainに誤コミットしてしまっていた場合
# まだpushしていなければ 989の派生ブランチで救済
# 参考: 過去のコミットから新ブランチを作って戻す手順

どの方法を選ぶか

  • Aの変更を持ったまま切替が最もシンプル(ほとんどのケース)
  • 切替先のブランチと変更が衝突する場合のみstashに退避(B)
  • 既にmainにコミットしてしまっている場合は過去コミットから派生ブランチを作る方法を参照

GUI・IDEでブランチを作成する

主要ツールでのブランチ作成

  • VS Code / Cursor:ステータスバーの現在ブランチ名クリック → Create new branch
  • JetBrains(IntelliJ/WebStorm):右下のブランチ名 → New Branch
  • SourceTree:左上のBranchボタン、またはCtrl+B
  • GitHub Desktop:Current Branch ドロップダウン → New Branch
  • GitHub Web:Branchesページから新規作成、またはIssue画面からブランチ作成

ポイント:GUIで作成したブランチも内部的にはgit switch -cが呼ばれています。初心者は最初GUIで流れを掴み、慣れたらCLIに移行するのがコスト低めです。GitHub Webからブランチを作ってIssueに紐づける運用も開発効率が高いです。

実践シナリオ

シナリオ① mainから機能ブランチを切って作業開始

もっとも頻出なパターン
# mainを最新化
git switch main
git pull origin main

# 新ブランチ作成&切替
git switch -c feature/123-user-settings

# 作業・コミット
git add src/settings.py
git commit -m "feat(#123): ユーザー設定画面を追加"

# 初回push
git push -u origin feature/123-user-settings

シナリオ② 本番緊急修正をリリースタグから切る

hotfixブランチ
# 最新化
git fetch --all

# リリースタグから hotfix を切る
git switch -c hotfix/v1.2.1 v1.2.0

# 修正して push
git commit -am "fix: 認証ヘッダーの検証漏れ"
git push -u origin hotfix/v1.2.1

タグからのブランチ作成や過去コミット派生の詳細は過去のコミットから新しいブランチを作り作業をやり直す方法を参照。

シナリオ③ 同僚のブランチをローカルで試す

リモート追跡から作成
git fetch --all --prune
git switch feature/review-me
# 同名のリモートを自動トラック

# 確認
git branch -vv

シナリオ④ 作業中だけどとりあえずブランチ化したい

未コミット変更を連れてブランチへ
# mainで変更中、慌ててブランチ化
git switch -c feature/wip
# 未コミット変更はそのまま新ブランチに引き継がれる

git add .
git commit -m "wip: 作業中"

チーム運用のベストプラクティス

ブランチ作成で守りたいこと

  • 1作業1ブランチ:機能単位/Issue単位でブランチを分ける
  • 短命ブランチ:なるべく短期間でマージ、長期化させない
  • 命名規則を固定feature/fix/等のプレフィックスを決めておく
  • Issue番号を含める:追跡性が上がり、PRリンクが自動で貼られるGitHub設定とも相性良い
  • main/developを常に最新化してから派生する
  • main直接作業を禁止:Branch protection rulesで物理的に
  • PRベースのマージ:作業ブランチ→PR→レビュー→マージの流れを徹底

便利なエイリアス

よく使う作成パターンをエイリアス化
# 新ブランチをmainから切ってpushまで
git config --global alias.new '!f() { git switch main && git pull && git switch -c "$1" && git push -u origin "$1"; }; f'
# 使い方
git new feature/xxx

# featureプレフィックス自動付与
git config --global alias.feat '!f() { git switch -c "feature/$1"; }; f'
git feat 123-user-settings   # → feature/123-user-settings が作成される

やってはいけない落とし穴

main で作業して直接push

個人リポジトリならともかく、チーム開発では必ずブランチを切るのが原則。Branch protection rulesでmain直接pushを禁止しておくと強制的にPRフローに乗ります。mainのコミット履歴を綺麗に保ちやすくなり、取り消しやrevertも楽になります。

古い派生元からブランチを切る

mainを何日も更新していない状態でgit switch -c feature/xxxすると、マージ時に大量のconflictが発生します。ブランチを切る前にgit pull origin mainで派生元を最新化するクセを付けましょう。長命ブランチでは定期的にgit rebase maingit merge mainで本線を取り込むと衝突が減ります。

上書きの -C / -B を気軽に使う

git switch -Cgit checkout -Bは同名ブランチを強制上書きします。誤って作業中のブランチを潰すリスクがあるので、基本は-c-bで「同名拒否」の安全策を取り、衝突したらgit branch -D <name>で明示削除してから作り直すのがおすすめです。

git branch だけで作成して切替を忘れる

git branch feature/xxx-bなし)は作成のみで切り替えません。気付かずに元のブランチで作業してしまうと、「新ブランチに居るつもりだったのに違った」事故が起きます。作成と切替を同時にしたいならgit switch -cgit checkout -bを使いましょう。

-u を忘れて毎回 origin xxx を手入力する

初回pushで-uを付け忘れると、以降のpush/pullで毎回リモート名とブランチ名を打つ羽目になります。git push -u origin <name>を習慣化するか、git config --global push.autoSetupRemote trueで自動化しましょう。

よくある質問

Qgit switch -c と git checkout -b、どちらを使えばいい?
AGit 2.23以降ならgit switch -cを推奨します。ブランチ操作に特化した設計で、checkoutのように多機能すぎて誤用するリスクが小さいためです。既存手順書やCIでcheckout -bが使われていても動作に問題はありません。
Qブランチ作成してもpushされない
Aブランチはローカル作成だけではリモートに反映されません。git push -u origin <branch-name>で初回pushすれば、以降はgit pushだけでリモートに反映されます。
Qブランチ作成時に「already exists」エラーが出る
A同名のブランチが既に存在します。git branch -aで確認して別名にするか、不要ならgit branch -D <name>で削除してから作り直してください。
Qブランチ名にスペースや日本語は使える?
Aスペース・特定記号(~^:?*等)は使えません。日本語は技術的には可能ですが、非推奨です。CIツール・GUIクライアント・エディタとの互換性問題が起きるため、英数字+-_/に統一しましょう。
Q作業途中でブランチを切り忘れた
A未コミットの状態ならgit switch -c feature/xxxで変更を持ったまま新ブランチに移れます。既にコミットしてしまった場合は過去のコミットから新しいブランチを作り作業をやり直す方法の手順で救済可能です。
Qリモートにあるブランチをローカルに取り込みたい
Agit fetch後、git switch feature/xxxだけでGit 2.23+は自動でトラックブランチを作ります。明示的に作るならgit switch -c feature/xxx origin/feature/xxxです。
Q過去のコミットから新ブランチを切りたい
Agit switch -c feature/xxx <SHA>で指定コミットから派生できます。タグや相対参照(HEAD~5)も指定可能。詳しくは過去のコミットから新しいブランチを作り作業をやり直す方法を参照。

関連記事

まとめ

  • 基本フロー:現在ブランチ確認 → switch -c で作成 → commit → push -u
  • Git 2.23以降はgit switch -cが推奨(checkout -bも同等)
  • 派生元はHEAD/別ブランチ/SHA/タグ/リモート追跡を自由に指定可
  • 初回pushは-uでupstream設定、push.autoSetupRemoteで自動化可能
  • 命名規則(feature/fix/hotfix/等)をチームで固定
  • 未コミット変更がある状態でもswitch -cでそのまま新ブランチに引き継げる
  • mainの最新化を忘れずに:切り分かれた時点のズレがマージ時に効いてくる

ブランチ作成はGitでもっとも頻繁に行う基本操作です。「1作業1ブランチ」「派生元を最新化」「-uで追跡設定」の3点を押さえれば、チーム開発にスムーズに乗れます。GUIから入ってもCLIに慣れても、内部で行われているのはswitch -cpush -uの組み合わせだけ——この単純なサイクルを繰り返すことで、安全で追いやすい開発履歴が自然に積み上がっていきます。