ブランチ

元のノートはそのままに、その時点から枝分かれさせたコピーへ思いきり書き込んでいく方法です。

定義 コードを管理するプログラムであるGitで、もとの幹から分かれて伸びた作業の枝を指します。それまでに積み上がった記録をそっくり受け継いだ地点から、新しい作業をつなげていきます。もとの幹は手をつけないまま残っているので、うまくいかなければいつでも戻ってこられます。

元のノートを置いて、コピーに書いてみる方法

クラスのみんなで文集を作るところを想像してみましょう。一冊のノートに、全員で文章を書き込んでいます。ところが、新しい話を試しに書いてみたくなりました。

元のノートに直接書いてしまうと、気に入らなかったときに困ります。消して書き直した跡が残り、前の文章まで汚れてしまうからです。そこで、ここまで書いたページをそのままコピーして新しいノートを作り、そちらに思いきり書いてみます。

Gitでは、このコピーをブランチと呼びます。作られた瞬間は元のノートと中身がまったく同じですが、そのあとに書く文章は、このコピーにだけ積み重なっていきます。元のノートは手をつけないまま、そこに残り続けるのです。

元のノート役をしている幹も、じつはブランチのひとつです。ふつうはメインブランチと呼び、みんながこの幹を完成版とみなして作業します。

メインから分岐した新機能ブランチが再統合される図 ここでコピー 新機能ブランチ メインブランチ マージ

みんなで書いて、書き上がったら移し替えます

文集をひとりで作ることはありませんよね。何人もの友だちがそれぞれコピーを手にして、別々の章を書いていきます。隣の人が何を書こうと、自分のコピーは揺らぎません。

ひとりが自分の章を書き終えたら、その文章を元のノートへ移し替えます。Gitでは、こうして枝の作業をもとの幹へ合わせることをマージと呼びます。この時点から、その文章はみんなの完成版に入ります。

困るのは、二人が同じページをそれぞれ違うように直してきたときです。片方は文を足し、もう片方はまるごと消していたとしたら、どちらを残すかは人が選んであげなければなりません。こうして手が必要になる状況を、コンフリクト(衝突)と言います。

ですから、コピーを長く寝かせすぎると、合わせるときに苦労します。そのあいだに元のノートが大きく変わってしまうからです。小さく枝分かれさせて、こまめに合わせるほうが、ずっと楽なのです。

もう少し正確に言うと

Gitは、じつはノートをまるごとコピーしているわけではありません。ブランチは「この幹のいちばん先はここ」と教えてくれる、一枚の名札に近いものです。文章が一ページ増えるたびに、名札がそのページへ移っていくだけなのです。

ですから、ブランチを作るのにかかる時間はほとんどありません。新しい名札を一枚つけるだけの作業だからです。一日に何本も作っては、いらなくなったら消してしまう、というのもよくあることです。

名前をまぎらわしく感じる、すぐ隣のものもあります。コミットは、そのつど保存しておいたノートの一ページです。ブランチは、そのページがつながった幹につけた名前のほうですね。

ですからブランチを、まったく別の世界のように考える必要はありません。元の場所へ戻ってこられる目印を置いたうえで、そこから枝分かれして気楽に手を入れてみる方法、と考えるほうが近いのです。

🤔 よくある誤解

✕ 誤解

ブランチを作ると、プロジェクトのフォルダ全体がコピーされ、その分だけ保存容量を余計に使う。

✓ 事実

ブランチは幹の先端を指す名札のようなものです。新しく作るときにファイルがまるごとコピーされるわけではないので、作ったり消したりする負担はとても小さいのです。

✕ 誤解

ブランチで作業すると、もとの幹のコードも一緒に変わってしまう。

✓ 事実

枝分かれしたあとに積み上げた作業は、その枝にだけ残ります。もとの幹に反映するには、マージという段階を別に踏む必要があります。

🧺 日常で出会う場面

1 ショッピングアプリに新しい決済画面をつけてみるとき、稼働中のコードはそのままに、枝をひとつ作ってそのなかだけで手を入れます。
2 おかしな画面が出るという報告が届いたら、急ぎの修正用に別の枝を作って直し、もとの幹へ合わせます。
💡 つまり ひとことで

これまでの記録を受け継いで枝分かれした作業の枝なので、もとのコードに触れないまま新しい作業を試してみることができます。