第4章 ブランチとマージ

ページ 2 / 4

01/ 04Git・GitHub

ブランチとマージ

本流を守る「下書きの枝」と、うまくいった分だけを合流させる仕組み

読了目安 約 3入門
読みはじめる
この記事の要約

ブランチは本流(main)を守るための下書きの枝です。枝の中では何をしても本流は無傷で、うまくいった変更だけをマージで合流させます。

  • 1 つの作業につき 1 本の枝が基本
  • 並行作業が混ざらないのは枝が分かれているから
  • コンフリクトは事故ではなく「どちらを採るか」の確認依頼

なぜ直接 main を変えてはいけないのか

本流の main は「いつでも公開できる完成品の棚」です。作りかけの変更を直接置くと、その瞬間から全員が作りかけを土台に仕事をすることになります。だから作業は必ず枝の上で進め、完成してから棚に納めます。

main(本流)いつでも公開できる棚
feat/新機能あなたの枝
fix/誤字修正同僚の枝

各ブロックや矢印をクリックすると、その仕組みの説明がここに表示されます。

この図をテキストで読む

構成図「枝が分かれているから、並行しても混ざらない」。ブロック3個、つながり2本。 【ブロック】 - main(本流): いつでも公開できる棚 - feat/新機能: あなたの枝 - fix/誤字修正: 同僚の枝 【図の符号】赤紫の枠=データの置き場 【流れ】 - あなたの作業: main(本流) → feat/新機能 - 同僚の作業: main(本流) → fix/誤字修正

枝は「分かれて、積んで、合流して、消える」使い捨てです。

合流はどう起きて、何がぶつかるのか

マージは 2 本の枝の変更を突き合わせて 1 つに束ねる操作です。Git は行単位で照合し、別々の場所の変更なら黙って束ねてくれます。人の出番が要るのは、変更が同じ箇所で重なったときだけです。

別ファイル・別の行を変更ふつうはこちら
Git が自動で束ねる人の出番なし
同じ箇所を 2 人が変更たまに起きる
コンフリクト — 人が選ぶ両方見比べて決める

各ブロックや矢印をクリックすると、その仕組みの説明がここに表示されます。

ほとんどの合流は自動 — Git が行単位で束ねてくれる

この図をテキストで読む

構成図「合流のほとんどは自動で済む」。ブロック4個、つながり2本。 【ブロック】 - 別ファイル・別の行を変更: ふつうはこちら - Git が自動で束ねる: 人の出番なし - 同じ箇所を 2 人が変更: たまに起きる - コンフリクト — 人が選ぶ: 両方見比べて決める 【図の符号】赤紫の淡い塗り=注意・課題 / 緑の淡い塗り=効果・良い点 【流れ】 - 自動で済む合流: 別ファイル・別の行を変更 → Git が自動で束ねる - 人が選ぶ合流: 同じ箇所を 2 人が変更 → コンフリクト — 人が選ぶ

怖がられがちなコンフリクトは、右下の 1 パターンだけ。

コンフリクトが怖くなくなる習慣

枝を長生きさせないこと、こまめに main の最新を取り込むこと ── この 2 つでコンフリクトはぐっと減ります。起きても慌てず、両方の変更を見比べて「どちらを残すか」を選ぶだけです。分からなければ、変更した本人同士で 1 分話せば決まります。

押さえておきたい用語

main(本流)
いつでも公開できる状態を保つ幹のブランチ。直接は触らず、枝の合流だけで前に進みます。
ブランチを切る
本流から作業用の枝を作ること。「切符を切る」の切るに近い言い回しで、切断ではありません。
マージ(merge)
枝の変更を突き合わせて 1 つに束ねる操作。別々の場所の変更は自動で束なります。
コンフリクト
変更が同じ箇所で重なったとき(近い行や、削除と編集のぶつかりも含む)、Git が「どちらを採るか」を人に尋ねてくる状態。
switch(切り替え)
作業する枝を乗り換える操作。手元のファイルの中身が、枝の内容に一瞬で入れ替わります。
ページ 2 / 4