git branchを今さら人に聞けないエンジニアへ:ブランチとは何か、なぜ現場で必須なのか
正直に言うと、ブランチって「便利そう」まではわかるけど、実戦で使ってないと永遠に“ふわっとした概念”のままです。
しかも、チームではGit操作自体はやってるから、余計に「今さら聞けない…」になりがち。
このページは、git branchをほぼ使ったことがない“知ったかぶりエンジニア”が、現場で困らないところまで一気に追いつくための実用記事です。

Contents

git branch(ブランチ)とは?一言でいうと

ブランチとは、同じリポジトリの中で、別の作業線(履歴の分岐)を作る仕組みです。
もっと噛み砕くと、「本番に影響しない別世界を作って、安心して作業できる」のがブランチです。

ブランチが無い世界の地獄(あるある)

  • main(またはmaster)で直接作業して、途中の未完成コミットが混ざる
  • 「とりあえず動く」状態を保てず、他メンバーの作業を止める
  • 緊急修正を入れたいのに、開発中の変更が邪魔で切り戻しが面倒
  • 誰の変更がどれか追いにくい(レビュー不能・責任境界が曖昧)

ブランチのリアルなメリット(現場で効くやつだけ)

メリット1:未完成の作業をmainに混ぜずに済む(事故率が激減)

ブランチ運用の本質はここです。mainは常に動く状態に保ち、作業はブランチで進めます。
「mainが壊れて全員の開発が止まる」を避けられます。

メリット2:レビューが成立する(差分が見える)

Pull Request(PR)/ Merge Request(MR)は、基本的にブランチ差分が前提です。
ブランチがあると、変更の意図・影響範囲・戻しやすさが一気に改善します。

メリット3:緊急対応(hotfix)が刺さる

本番で障害 → すぐ直したい。
でもmainに開発途中の大きな改修が入っていると、リリースできません。
ブランチ運用なら、本番と同じ地点からhotfixブランチを作って、最小修正だけを安全に出すことができます。

メリット4:「並行作業」が当たり前にできる

  • Aさん:新機能
  • Bさん:バグ修正
  • Cさん:リファクタ

全員が別ブランチで進め、レビューして順にmainへ。
これができると、チーム開発が“ワークフロー”になります

ブランチのリアルなデメリット(ここを知らないと嫌いになる)

デメリット1:マージが怖い(コンフリクト)

ブランチを切るほど、どこかで統合が必要になります。
同じ行や同じファイルを複数人が触ると、コンフリクト(競合)が起きます。

ただし、これは「ブランチが悪い」ではなく、統合の頻度が低い / ブランチが長生きしすぎが主原因です。

デメリット2:運用が雑だとブランチが墓場になる

  • ブランチが増えすぎて何が何だかわからない
  • 放置ブランチだらけ(どれが最新?)
  • 巨大PRでレビュー不能

対策はシンプルで、ブランチ命名・短命運用・小さめPRを守るだけで激減します。

デメリット3:rebase/force push周りで事故る

慣れるまでは、共有ブランチに対するrebaseやforce pushが事故ポイントです。
ルールさえ決めれば回避できます(後半にまとめます)。

まず覚えるべき前提:main(本線)と作業ブランチの関係

  • main:安定しているべき(デプロイ対象になりがち)
  • featureブランチ:新機能・改修
  • fixブランチ:バグ修正
  • hotfixブランチ:本番緊急修正(最短で出す)

今日から使える:ブランチ運用の最小セット(これだけで8割勝てる)

運用ルール(ミニマム)

  1. mainに直接コミットしない(原則)
  2. 作業は必ずブランチを切る
  3. PR/MRでレビューしてmainへ取り込む
  4. 取り込み後はブランチを消す(墓場化防止)
  5. ブランチは短命(理想:数時間〜数日)

ブランチ名のおすすめ(迷ったらこれ)

  • feature/xxx:新機能(例:feature/genba-search)
  • fix/xxx:通常のバグ修正(例:fix/login-redirect)
  • hotfix/xxx:本番緊急修正(例:hotfix/payment-500)
  • chore/xxx:雑務(依存更新、設定など)(例:chore/deps-update)

具体的な操作方法:ブランチ作業の基本フロー(コピペでOK)

0) まずは最新のmainを手元に持ってくる

git switch main
git pull

※ 古いgitだと git switch が無いことがあります。その場合は git checkout を使います(後述)。

1) ブランチを作って移動する

# 新しいブランチを作って、そのまま移動
git switch -c feature/genba-search

2) いつも通り作業してコミット

git status
git add .
git commit -m "Add search form and filters"

3) リモートにpushして、PR/MRを作る

git push -u origin feature/genba-search

-u を付けると、次から git push だけで同じ行き先にpushできます(地味に便利)。

4) レビューOK → mainへ取り込まれたら、手元も掃除

git switch main
git pull

# ローカルブランチ削除
git branch -d feature/genba-search

もし「マージされてないから消せない」と言われたら、強制削除:

git branch -D feature/genba-search

5) リモートブランチも消す(GitHub等で自動削除設定も可)

git push origin --delete feature/genba-search

よく使うコマンドまとめ(ブランチ周りだけ)

ブランチ一覧を見る

# ローカル
git branch

# リモート含む
git branch -a

今どのブランチにいるか確認する

git status

ブランチ名を変更する

git branch -m feature/old-name feature/new-name

リモートの最新状態を取得(fetch)

git fetch --prune

--prune は、消されたリモートブランチ情報も掃除してくれます(放置すると一覧が汚れます)。

「checkout」と「switch」の違い(今さらポイント)

昔からある git checkout は、ブランチ移動もファイル復元もできる“多機能すぎる”コマンドでした。
最近は役割を分けて、

  • git switch:ブランチ移動
  • git restore:ファイル復元

になっています。可能なら switch/restore を使う方が事故が減ります。
ただし環境により switch が無い場合は checkout でもOKです。

ブランチの統合(マージ)を理解する:mergeとrebaseの超実用比較

merge:安全寄り・現場で一番無難

ブランチの変更をmainへ取り込む一般的な方法です。履歴は「マージコミット」として残ります。
GitHubのPRの「Merge」ボタンは基本これ系です(設定でSquash/Rebaseも可)。

rebase:履歴をきれいにできるが、ルール無しだと事故る

rebaseは、コミットの土台を付け替えるイメージです。履歴が直線的になり見やすい反面、
すでに共有しているブランチをrebaseすると、履歴が書き換わって衝突や混乱が起こりやすいです。

初心者(ブランチ未経験)が採用するなら、この結論

  • 基本は PRでmerge(またはsquash merge) が一番ラク
  • rebaseは「自分だけが触っている個人ブランチ」で、慣れてから
  • 共有ブランチにrebaseするなら、チームルール必須

コンフリクト(競合)が怖い人へ:一番ラクな回避策

回避策1:ブランチを短命にする(最大の正解)

1週間放置したブランチは、ほぼコンフリクト製造機です。
「小さく切る」「早くPR」「早くマージ」これだけでだいぶ勝ちます。

回避策2:mainをこまめに取り込む(ただし方法に注意)

作業ブランチで、mainの更新を取り込んでズレを減らします。

# 作業ブランチで
git fetch origin
git merge origin/main

「rebaseで取り込む」もありますが、慣れないうちはmergeでOKです。

回避策3:巨大ファイル・同じ箇所を触る設計を減らす

  • 巨大な設定ファイルをみんなで触る → 競合しがち
  • 同じテンプレ/同じ関数に変更が集中 → 競合しがち

「分割」「責務分離」「変更範囲を狭くする」だけでも競合は減ります。

今さら事故りがちポイント集(“知ったか”が一番やるやつ)

事故1:mainで作業してしまった

やりがちです。コミット前ならブランチを切って逃げられます。
(変更がワーキングツリーにある状態で)

git switch -c feature/escape-from-main

コミットしてしまった場合も、ブランチを作って退避できます。

# main上でコミット済みでもOK(その地点を指すブランチを作る)
git branch feature/escape-from-main

事故2:push先を間違えた/別ブランチにpushした

慣れるまでよくあります。まず落ち着いて git statusgit branch を確認。
次に「どのブランチがどのコミットを指しているか」を確認します。

git log --oneline --decorate -n 20

事故3:force pushで誰かの履歴を吹き飛ばした

これはシャレになりません。
ルールとして、最低限これだけ守ると安全です:

  • mainへはforce pushしない
  • 複数人が触るブランチへはforce pushしない
  • やるなら --force-with-lease を使う(上書き事故を減らす)
# どうしても必要なときはこっち(安全寄り)
git push --force-with-lease

現場でよくあるブランチ運用パターン(あなたのチームに合わせて選ぶ)

パターンA:シンプル運用(おすすめ)

  • main(安定)
  • feature/fix/hotfix(作業)

PRでレビューしてmainへ。小規模〜中規模チームで最も回りやすいです。

パターンB:developを挟む(Git Flow寄り)

  • main(リリース用)
  • develop(開発の統合先)
  • feature/* → develop → release → main

工程が増える分、運用コストも上がります。
「リリースが厳密」「複数バージョンを並行保守」などがある場合に向きます。

“git branch”で検索して来た人が、明日から困らない最短チェックリスト

  1. mainは触らない(原則)
  2. 作業前に git switch maingit pull
  3. git switch -c feature/xxx でブランチ作成
  4. 小さめにコミット、git push -u origin feature/xxx
  5. PRを作る(レビュー)
  6. 取り込み後にブランチ削除(ローカル/リモート)

まとめ:ブランチは「うまく使うと、あなたの作業を守る防具」

ブランチの価値は「かっこいいGit使い」になることではなく、
安定したmainを保ち、作業を安全に進め、レビューとリリースを成立させることです。

もし今までブランチを避けてきたなら、まずはこの記事の「最小フロー」だけでOK。
一度回ると、たぶん「なんで今までmainでやってたんだろ…」となります。

おまけ:ブランチ系コマンド早見表(必要なときにだけ見ればOK)

# main最新化
git switch main
git pull

# ブランチ作成&移動
git switch -c feature/xxx

# push(初回)
git push -u origin feature/xxx

# ブランチ一覧
git branch
git branch -a

# リモート情報更新&掃除
git fetch --prune

# main取り込み(作業ブランチで)
git merge origin/main

# ローカルブランチ削除
git branch -d feature/xxx
git branch -D feature/xxx

# リモートブランチ削除
git push origin --delete feature/xxx

 
※参考にされる場合は自己責任でお願いします。

この記事の運営者(IT部長)からのお知らせ

PCトラブルは解決しましたか?

もし「会社のPCが全部遅い」「Office 365のエラーが多発する」「ネットワークが不安定」といった、調べても解決しない「会社全体」のお悩みがありましたら、ぜひご相談ください。

「Windows11 高速化」といったお悩み検索で毎月1,200人以上が訪れる、
このサイトの運営者
(建設会社IT部長)が、川崎・横浜・東京城南エリアの法人様限定で「無料ITお困りごと診断」を行っています。