0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gitのブランチ戦略とコンフリクト管理がごちゃごちゃしてたのでまとめた件

0
Last updated at Posted at 2026-06-02

どうも、拓田です。

「ブランチ戦略」って言葉、なんとなく聞いたことあるけど「Git Flow?GitHub Flow?何が違うの?」ってなりませんか?

さらに「コンフリクトを防ぐ」という話になると、バックマージ・cherry-pick・upstream firstといった言葉が出てきて余計ごちゃごちゃする。

今回はブランチ戦略の種類とコンフリクト管理の手段を、整理しました。


1. ブランチ戦略の種類

Git Flow

複数のブランチを使って開発・リリースを厳密に管理する戦略です。

main        ← 本番環境。常にリリース可能な状態
develop     ← 開発の主軸。featureブランチの統合先
feature     ← 個々の機能開発。developから分岐
release     ← リリース前の最終調整。developから分岐
hotfix      ← 本番のバグ緊急修正。mainから分岐

流れはこんな感じ:

feature → develop → release → main
                                ↑
                           hotfix(緊急時)

管理上の課題と対策

課題 管理方法
マージコンフリクトの多発 featureブランチを小さく・短命に保つ。定期的にdevelopの最新をfeatureに取り込む
マージミス・事故 mainとdevelopへの直接pushを禁止。プルリクエストのレビュー承認を必須にする
長期ブランチによるマージ地獄 フィーチャーフラグを使い、ブランチを長生きさせない

向いている用途: バージョン管理が必要なアプリ・リリースサイクルが決まっているプロジェクト(例:モバイルアプリ)


GitHub Flow

シンプルに main と feature ブランチだけで管理する戦略です。

main        ← 常にデプロイ可能な状態
feature     ← 作業ブランチ。mainから分岐してmainに戻す

流れはシンプル:

main → feature(作業)→ プルリクエスト → レビュー → main

向いている用途: 継続的デプロイ・Webサービス・小〜中規模チーム


GitLab Flow

GitHub Flow にリリースブランチの概念を追加した戦略。開発の主軸は main ブランチです。

main(開発の主軸)
 └── feature(作業)→ mainにマージ
      ↓
 release/v1.0    ← リリースタイミングでmainから切り出す
 release/v2.0    ← 次のバージョン

重要な理解:featureブランチではなくmainが軸

mainで開発を継続しながら、リリースタイミングで release/v1.0 を切り出す構造です。

・mainで開発を継続しながら
・release/v1.0はv1.0のバグ修正だけに集中できる
・release/v2.0は並行して次バージョンの準備ができる

→「開発の継続」と「リリースの安定」を分離できるのが強みです。

向いている用途: 中〜大規模・バージョン管理あり


Trunk Based Development

全員が短命な feature ブランチを使い、毎日 main にマージする戦略。Google などの大規模開発で採用されています。

・featureブランチの寿命は最大1〜2日
・フィーチャーフラグで未完成機能をOFFにしたままmainにマージ
・CIで自動テストを徹底してmainの品質を担保

向いている用途: 大規模・継続的デプロイ・CI/CD徹底


規模別の使い分けまとめ

規模 向いている戦略
小〜中規模・高頻度デプロイ GitHub Flow
中〜大規模・バージョン管理あり GitLab Flow
大規模・継続的デプロイ・CI/CD徹底 Trunk Based Development
バージョン管理が厳密に必要 Git Flow

2. コンフリクトを防ぐ3つの手段

まず「上位・下位ブランチ」を理解する

上位 → main           (開発の主軸・最新・起点)
下位 → release/v1.0   (mainから切り出したもの)

「上位・下位」の基準は開発の流れの起点がどこか。release/v1.0 は main から切り出して作ったため、main が上位になります。


バックマージ

下位ブランチの変更を上位ブランチに反映させてズレをなくす操作です。

【状況】
release/v1.0でバグ修正した
        ↓
mainにも同じ修正を反映させないと
v2.0に同じバグが残ってしまう
        ↓
release/v1.0 → mainにバックマージして
両者のズレをなくす

⚠️ 注意: バックマージはコンフリクトをなくすための操作ではなく、内容のズレをなくすための操作。むしろバックマージ自体がコンフリクトを引き起こすリスクがあります。

バグ修正はこんな流れが安全です:

release/v1.0
    ↓ ブランチを切る
hotfix/issue-123(バグ修正作業)
    ↓ プルリクエスト
release/v1.0にマージ
    ↓
mainにもバックマージ

release/v1.0に直接コミットせず hotfix ブランチを切る理由は、レビューを挟めることと修正失敗時のリスクを局所化できることです。


cherry-pick

特定のコミットだけを別のブランチに持っていく操作です。ブランチ全体をマージするのではなく、欲しいコミットだけを抜き出します。

【状況】
main:
  コミットA(v2.0の新機能)
  コミットB(v2.0の新機能)
  コミットC(バグ修正) ← これだけrelease/v1.0に持っていきたい
  コミットD(v2.0の新機能)

【cherry-pick】
git cherry-pick コミットC

release/v1.0:
  コミットC(バグ修正)だけが適用される

バックマージとの違い:

バックマージ → ブランチ全体をマージするためv2.0の変更と衝突しやすい
cherry-pick  → 必要なコミットだけ持っていくためコンフリクトリスクが最小限

upstream first(上流優先)

上位ブランチ(main)で先に修正してから下位ブランチに持っていく運用方針です。

【upstream firstの流れ】
mainでバグ修正
        ↓ cherry-pickで
release/v1.0にも適用

バックマージとの比較:

運用 流れ リスク
バックマージ release/v1.0で修正 → mainに戻す バックマージ忘れのリスクあり
upstream first mainで修正 → release/v1.0にcherry-pick mainが常に最新を保てる

よくある誤解:
upstream firstを徹底していても「v2.0の開発が進むこと」は普通に起きます。upstream firstが防ぐのは「バックマージ忘れ」であって、開発の進行を止めるものではありません。


3つの手段の整理

手段 種類 目的
バックマージ 操作 下位ブランチの変更を上位ブランチに反映してズレをなくす
cherry-pick 操作 特定コミットだけを別ブランチに持っていきコンフリクトリスクを下げる
upstream first 運用方針 上位ブランチで先に修正してズレ自体を発生させない

重要: cherry-pick だけが「操作」であり、バックマージと upstream first は「運用の方針」。cherry-pick はどちらの文脈でも使える道具です。


まとめ

  • 🌱 ブランチ戦略は規模・リリース頻度・チーム体制によって使い分ける
  • 🔀 Git Flowはブランチが多く複雑だが、バージョン管理が厳密に必要な場合に有効
  • GitHub Flowはシンプルで高頻度デプロイに向いているが、大規模では限界がある
  • 🏢 GitLab Flowはmainを軸にリリースブランチでバージョン管理する中〜大規模向け
  • 🚀 Trunk Based Developmentは短命ブランチとCI/CDを徹底した大規模向け
  • 🔧 バックマージ・cherry-pick・upstream firstはズレやコンフリクトを管理するための手段であり、それぞれ「操作」と「運用方針」の違いがある

ブランチ戦略は「これが正解」というものではなく、チームの規模や開発スタイルに合わせて選ぶものです。まずは GitHub Flow から始めて、必要に応じて複雑な戦略に移行するのが現実的だと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?