開発支援・コーディング

Gitとは|分岐を1日で取り込めば衝突は0.2個、30日持つと40.6個になった

Gitの分岐はどれくらい持ってよいのか衝突はどう増えるのか取り込む間隔はどう決めるのか

分岐を1日で取り込むと、衝突は平均0.2個でした。14.8%の分岐でしか起きません。

30日持つと40.6個です。日数は30倍ですが、衝突は約200倍になりました。

この記事の要点

  • 1日で0.2個・14.8%
  • 3日で1.1個・71.3%
  • 7日で4.6個・99.7%
  • 30日で40.6個

分岐を1日で取り込めば衝突は0.2個、30日持つと40.6個になった

衝突は日数に比例しません。自分の変更と他人の変更が両方増えるので、掛け算で効きます。

Gitの分岐を長く持つと衝突が増えます。どれだけ増えるのかを実際に数えました。

ファイル1200個・開発者8人という場を作りました。1人が1日に3個のファイルを触り、触る場所には偏りを持たせています。

分岐の寿命を変えて、取り込むときに同じファイルがぶつかる数を3000回まわして数えました。

寿命を動かす

text
ファイル 1200個・開発者 8人。1人が1日に 3個のファイルを触る
触るファイルは偏らせてある。上位10個で全体の10.9%を占める

分岐の寿命  自分が触ったファイル  他の人が触ったファイル  衝突した割合  平均の衝突数
1日                          3.0個                   20.5個         14.8%          0.2個
3日                          8.9個                   58.7個         71.3%          1.1個
7日                         20.5個                  127.2個         99.7%          4.6個
14日                        40.0個                  230.6個        100.0%         13.6個
30日                        81.7個                  415.9個        100.0%         40.6個

1日なら衝突は平均0.2個です。85.2%の分岐は、何もぶつからずに取り込めます

30日持つと40.6個です。日数は30倍ですが、衝突は約200倍になりました。

両側が増える

理由は表の中ほどの2列にあります。自分が触った数も、他の人が触った数も、日数とともに増えます

1日なら3.0個と20.5個です。30日では81.7個と415.9個になります。ぶつかる組み合わせは、その掛け算で増えます。

出典もこの向きを分岐は必然的に離れていくので、幹への反映が積み重なるほど、その分岐を幹へ取り込むのは難しくなると述べています。

日数が2倍になると、衝突はそれ以上に増える。

81.701日3日7日14日30日平均の衝突数自分が触ったファイルファイル1200個・開発者8人で3000回まわした実測。衝突した分岐の割合は14.8%から100.0%へ。
図1 ── 分岐の寿命と衝突の数
出典Martin Fowler「Patterns for Managing Source Code Branches」2026-08-18 確認
Branches inevitably diverge, so as more commits modify mainline, it gets harder to merge the release branch into mainline.
原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18

7日を超えると、衝突は確実に起きる

衝突するかどうかは、寿命でほぼ決まります。数日を境に、例外だったものが常態になります。

Gitの分岐を取り込むとき、衝突するかどうかも寿命で決まります。表の右から2列目を見ます。

1日なら14.8%です。7回に1回だけぶつかる、という水準です。

3日で71.3%、7日で99.7%になります。1週間持てば、ほぼ確実にぶつかります。

手間の性質が変わる

たまに起きるうちは、起きたときだけ対処すれば済みます。毎回起きるようになると、作業の一部になります

しかも衝突の数は同時に増えています。7日で4.6個、14日で13.6個です。1回の対処にかかる時間も伸びます

出典も小さく取り込む理由を取り込みが小さければ作業も少なくなる。衝突を抱えうるコードの変更が少ないからだとしています。

短く保つ手

  1. 幹をこまめに取り込む。分岐の側から差分を先に消す
  2. 機能を分ける。1つの分岐で1つのことだけやる
  3. 隠して出す。動かない部分は使えないようにして先に入れる
  4. 触る場所を分ける。同じファイルに集中しない割り振りにする

3番目が要点です。機能の完成と、取り込みの頻度を切り離せます。完成まで待つ必要はありません。

4番目はこの計測にも表れています。触る場所を偏らせたので、上位10個のファイルだけで全体の10.9%が集中しています。

出典Martin Fowler「Patterns for Managing Source Code Branches」2026-08-18 確認
Smaller integrations mean less work, since there's less code changes that might hold up conflicts.
原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18

分岐は、取り込むまでが1組の作業

分岐を切る操作そのものは軽い作業です。重いのは、分かれていた期間の差を埋める側です。

Gitで分岐を切るのは一瞬です。費用がかかるのは、取り込むときです。

だから「分岐を作るかどうか」ではなく、どれだけの期間、分かれたままにするかが問題になります。

出典もこの点をどれくらいの頻度で取り込みを行うかは、チームの動き方に驚くほど強い影響を与えると述べています。

費用は期間に付く

この計測でも、分岐を切る操作そのものは1行も数えていません。数えたのは、分かれていたあいだに触られたファイルだけです。

1日なら自分3.0個・他の人20.5個、30日なら81.7個と415.9個です。期間がそのまま量になります

衝突として現れないずれ

この計測では、同じファイルを触ったら衝突として数えました。実際にはもっと静かなずれもあります

  1. 同じファイルの別の場所。取り込めるが、意図が食い違うことがある
  2. 別のファイルの同じ約束。呼ぶ側と呼ばれる側がずれる
  3. 設定と実装。片方だけ更新された状態
  4. 依存の版。どちらの分岐でも上げていた

1番目と2番目は、機械には見えません。取り込めてしまうので、動かして初めて分かります

この種のずれも、分かれていた期間に比例して増えます。衝突の数は、見えているぶんだけです。

取り込んだあとに動かして確かめる仕組みはCI/CDの記事で扱っています。

重いのは分岐を切ることではなく、分かれていた期間。

充足 2 / 4取り込むまでの日数を決めている3日で71.3%、7日で99.7%の分岐が衝突する完成前でも取り込める形にしている機能の完成を待つと、寿命がそのまま伸びる衝突の数だけを見ている取り込めてしまう静かなずれは、衝突として数えられない長い分岐を1本で進めている30日持つと衝突が40.6個になり、1日の約200倍になるファイル1200個・開発者8人で3000回まわした実測にもとづく。
図2 ── 分岐を切る前の点検項目
余談 この計測での注意

触るファイルの偏りは式で作った分布です。実際には担当や機能でさらに偏るので、同じ人が同じ場所を触り続ける場合は衝突が減ります。逆に共通の設定ファイルがあると、ここより増えます。衝突の判定も「同じファイルを触ったか」という粗い形です。ここで見せているのは、自分と他人の変更が両方増えるため、衝突が日数以上の速さで増えるという関係です。

出典Martin Fowler「Patterns for Managing Source Code Branches」2026-08-18 確認
How often we do integration has a remarkably powerful effect on how a team operates.
原文Martin Fowler「Patterns for Managing Source Code Branches」 この内容の有効期限2027-02-18

よくある質問

Gitの分岐はどれくらい持ってよいですか
短いほど衝突が減ります。この計測では1日で0.2個、7日で4.6個、30日で40.6個になりました。
なぜ日数に比例しないのですか
自分が触った量と、他の人が触った量の両方が増えるためです。掛け算で効いてきます。
何日を超えると危ないですか
この計測では7日で99.7%の分岐が衝突しました。3日でも71.3%です。
機能が大きい場合はどうしますか
機能の完成と取り込みを切り離します。動かない部分を隠したまま、こまめに取り込む形にします。

まとめ

  • 履歴を分岐させて扱う仕組み
  • 衝突は日数の2乗で効く
  • 7日持つとほぼ確実に衝突
  • 機能の大きさと取り込みを切り離す

今日から始められること

  1. いまの分岐が何日目かを確かめる
  2. 取り込むときの衝突の数を記録する
  3. 分岐の寿命と衝突数を並べて見る
  4. 長い分岐を分割できないか検討する

実務で組んだGitのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る