3秒でわかる
作業を本流から分けて進めるためのGitの仕組み。互いの変更をぶつけずに並行して開発でき、機能単位で履歴を残せるようになります。
30秒図解
もう少し詳しく
どういうものか
ブランチは、コミットの履歴を枝分かれさせて、本流とは別の場所で作業を進めるための仕組みです。Gitのブランチは特定のコミットを指す軽い目印にすぎず、作成にファイルのコピーは起きません。だから一瞬で作れて、気軽に捨てられます。作業が終わったらマージで本流へ合流させます。
なぜ必要か
複数人が同じ履歴に直接コミットすると、書きかけの機能と修正が混ざり、動かない状態が共有されます。ブランチを分ければ、それぞれの作業は完成するまで他の人に影響しません。もうひとつの利点は、機能単位で履歴がまとまることです。不具合が見つかったとき、どの合流で入ったのかをたどれます。
具体例
git switch -c feature/login # main から枝を作って移動
# ... 編集してコミット ...
git switch main
<a href="/glossary/git-pull" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">git pull</a> # 本流の最新を取り込む
git switch feature/login
git <a href="/glossary/merge" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">merge</a> main # 先に自分の枝で衝突を解決しておく
git switch main
git merge --no-ff feature/login # 合流。枝の存在を履歴に残す
git branch -d feature/login # 役目を終えた枝は消すmain A───B───────────E(merge)
\ /
feature/login C───D───つまずきやすいところ
枝を長く放置するほど、本流との差が開いて衝突が増えます。数日で合流できる大きさに切るのが基本です。合流の直前に本流を取り込むのではなく、作業中もこまめに取り込むと、1回あたりの衝突が小さくなります。
もうひとつは、切り出す元の枝を間違える例です。古い状態の枝から新しい枝を作ると、他人の変更を巻き戻すコミットが混ざります。作る前に git switch main と git pull を済ませます。名前の付け方も後から効いてきます。fix2 のような名前が並ぶと、1週間後には誰も中身を思い出せません。
覚え方
ブランチは、履歴という木に付けた付箋です。移動も削除も安く、恐れずに切って構いません。
似た用語との違い
タグは特定のコミットに付ける動かない目印で、リリース地点を示すために使います。ブランチはコミットするたびに先へ進む目印です。動くかどうかが両者の違いです。
消したつもりのブランチが手元にだけ残ることもあるため、定期的に一覧を確認します。