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
作業前に確認したいこと
- 今いるブランチは意図した派生元か(mainか?developか?)
- 未コミットの変更は無いか(あるなら commit / stash する)
- 派生元がリモート最新か(
git fetch+git pullで最新化) - 過去のコミットから派生したい場合は過去のコミットから新しいブランチを作り作業をやり直す方法を参照
STEP 2:ブランチを作成&切り替える(推奨:switch -c)
Git 2.23以降はgit switch -cが推奨コマンドです。「Create the new branch and switch to it」で、作成と切り替えを1コマンドで完了します。
# 現在ブランチを派生元にして新ブランチを作成&切替 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 feature/login # 派生元を指定 git checkout -b feature/login main git checkout -b feature/login origin/main # 強制上書き git checkout -B feature/login
STEP 3:リモートに公開する(初回push+upstream設定)
ブランチを作ってコミットを積んだら、リモートに公開してチームと共有します。初回は-u(--set-upstream)を付けて追跡先を設定するのが鉄則。以降はgit push・git pullだけでリモートと同期できるようになります。
# ブランチを作って作業して初コミット 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+)
# 新ブランチの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/xxx/bugfix/xxx:通常のバグ修正hotfix/xxx:本番緊急修正release/x.y.z:リリース準備用chore/xxx:設定/CI/雑務refactor/xxx:リファクタリングdocs/xxx:ドキュメント更新experiment/xxx/spike/xxx:検証用の使い捨て
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
未コミット変更がある状態でブランチを作る
「ちょっと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
シナリオ② 本番緊急修正をリリースタグから切る
# 最新化 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 main/git merge mainで本線を取り込むと衝突が減ります。
上書きの -C / -B を気軽に使う
git switch -C/git checkout -Bは同名ブランチを強制上書きします。誤って作業中のブランチを潰すリスクがあるので、基本は-c/-bで「同名拒否」の安全策を取り、衝突したらgit branch -D <name>で明示削除してから作り直すのがおすすめです。
git branch だけで作成して切替を忘れる
git branch feature/xxx(-bなし)は作成のみで切り替えません。気付かずに元のブランチで作業してしまうと、「新ブランチに居るつもりだったのに違った」事故が起きます。作成と切替を同時にしたいならgit switch -c/git checkout -bを使いましょう。
-u を忘れて毎回 origin xxx を手入力する
初回pushで-uを付け忘れると、以降のpush/pullで毎回リモート名とブランチ名を打つ羽目になります。git push -u origin <name>を習慣化するか、git config --global push.autoSetupRemote trueで自動化しましょう。
よくある質問
git switch -cを推奨します。ブランチ操作に特化した設計で、checkoutのように多機能すぎて誤用するリスクが小さいためです。既存手順書やCIでcheckout -bが使われていても動作に問題はありません。git push -u origin <branch-name>で初回pushすれば、以降はgit pushだけでリモートに反映されます。git branch -aで確認して別名にするか、不要ならgit branch -D <name>で削除してから作り直してください。~^:?*等)は使えません。日本語は技術的には可能ですが、非推奨です。CIツール・GUIクライアント・エディタとの互換性問題が起きるため、英数字+-_/に統一しましょう。git switch -c feature/xxxで変更を持ったまま新ブランチに移れます。既にコミットしてしまった場合は過去のコミットから新しいブランチを作り作業をやり直す方法の手順で救済可能です。git fetch後、git switch feature/xxxだけでGit 2.23+は自動でトラックブランチを作ります。明示的に作るならgit switch -c feature/xxx origin/feature/xxxです。git switch -c feature/xxx <SHA>で指定コミットから派生できます。タグや相対参照(HEAD~5)も指定可能。詳しくは過去のコミットから新しいブランチを作り作業をやり直す方法を参照。関連記事
- Gitで過去のコミットから新しいブランチを作り作業をやり直す方法 — タグ/SHA/過去時点から派生する発展編
- 【Git】ブランチを削除する方法 — 不要ブランチの整理
- 【Git】ブランチ名を変更する方法 — typoやプレフィックス変更時
- 【Git】リモートブランチを確認する方法 — 作成後の状態確認
- 【Git】originとupstreamの違いと使い分け完全ガイド — upstream設定の深掘り
- 【Git】ブランチ間の差分を比較する方法 — 作業後のPR準備
- 【Git】rebaseとmergeの違いと使い分け — ブランチ運用の基盤
- 【Git】よく使うgitコマンドまとめ — 日常コマンドの早見表
まとめ
- 基本フロー:現在ブランチ確認 → 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 -cとpush -uの組み合わせだけ——この単純なサイクルを繰り返すことで、安全で追いやすい開発履歴が自然に積み上がっていきます。
