ブランチとは?作業を枝分かれさせて、あとで合わせる仕組み

ブランチ、作業を分けて、あとで合わせる。寅次郎先生と記事の内容を表すイラスト。
確認日:2026年10月7日
Gitの版:2.56.0

新しい機能を試している途中で、急ぎの修正を頼まれることがあります。試作の変更と急ぎの修正が混在しないよう、作業の流れを分けておく仕組みがブランチです。

本記事では、Gitの公式ドキュメントと『Pro Git』をもとに、ブランチの正体と、分けた作業を合わせるマージの仕組みを解説しましょう。

ブランチとは

ブランチは、コミットの履歴を枝分かれさせ、別々の作業の流れを並行して進めるための仕組みです。

ブランチはコミットを指す目印。mainはコミットC3を、featureは枝分かれした先のC5を指す。HEADは今作業しているブランチを指し、新しくコミットすると、そのブランチの目印が新しいコミットへ進む

「枝」と聞くと、ファイルを丸ごと別のフォルダーに写すように思えるかもしれません。『Pro Git』によると、Gitのブランチの正体は、コミットの1つを指す、軽くて動かせる目印です。作るときは、指す先のコミットのハッシュ(40文字)と改行の41バイトをファイルに書くだけなので、一瞬で済みます。

今どのブランチで作業しているかを指すのは、HEAD という特別な目印です。新しくコミットすると、HEAD が指しているブランチの目印が、新しいコミットへ進みます。

最初のブランチの名前

リポジトリを作ると、最初のブランチが1つできます。Gitは何も指定しなければ master という名前で作りますが、『Pro Git』の説明では特別なブランチではありません。名前は設定(init.defaultBranch)で変えられ、main などの名前にしているサービスやプロジェクトもあります。

ブランチを合わせるマージ

分けた作業を最後に1つのブランチへ合わせる操作を、マージ(merge)と呼びます。状況によって、その形は2つです。

マージの2つの形。mainが枝分かれのあと進んでいなければ、mainの目印を先へ進めるだけで済む(早送り)。両方が進んでいれば、2つを合わせた新しいマージコミットMを作る

合わせる先のブランチが、枝分かれのあと進んでいなければ、目印を先へ進めるだけで済みます。これが早送り(fast-forward)で、新しいコミットは作られません。

両方のブランチが進んでいる場合、Gitは2つのブランチの先端と、枝分かれした地点のコミットを使って変更を合わせます。その結果は、前のコミットを2つ持つマージコミットとして記録される仕組みです。

コンフリクトが起きたら

2つのブランチが、同じファイルの同じ箇所を別々に書き換えていると、Gitはどちらを採るか決められません。この状態が、コンフリクト(衝突)です。

コンフリクトが起きると、Gitはマージを途中で止め、ぶつかった箇所に両方の内容を印付きで書き込みます。人がファイルを開いて正しい内容に直し、git add と git commit を実行すれば、マージは完了です。どちらの変更を残すかは中身を読んで判断することなので、機械的にどちらかを選ぶのは避けましょう。

プルリクエストとの関係

GitHubやGitLabのようなサービスでは、マージの前に、変更を見てもらう手順を挟めます。GitHubではプルリクエスト、GitLabではマージリクエストという名前です。

GitHubのドキュメントは、プルリクエストを「コードの変更をマージする提案」と説明していました。ブランチ間の差分を画面に表示し、レビューやコメントを経てから、マージするかどうかを決めます。プルリクエストはGitそのものではなく、サービスが用意している機能です。

製品での使われ方

ブランチとマージはGitの機能なので、どのサービスでも同じ考え方で使えます。サービスでは、マージの基準になるブランチ(既定のブランチ)を決め、作業用のブランチからプルリクエストを出す使い方が一般的です。

プログラミング用のAIエージェントに作業を任せるときも、ブランチを分けておきましょう。AIの変更を作業用のブランチにまとめておけば、内容を確かめてからマージでき、気に入らなければブランチごと捨てられます。ブランチを分けたら、手元の変更をプッシュして、プルリクエストで差分を確かめてからマージするとよいでしょう。

参考にした一次情報

当サイトが作成した本文はCC BY 4.0です。引用画像は対象外です。Gitのしくみの記事の一覧へもどる