一人前エンジニア道場

バージョン管理とGit / 約20分

ブランチとマージ: 並行作業の分離と統合

なぜこれを学ぶか

ブランチがなければ、機能追加中に緊急バグ修正ができません。ブランチは「安全な実験場」であり、チーム全員が独立して作業できる仕組みの核心です。

ブランチ は現在の状態からの「分岐点」です。git checkout -b feature/login で新ブランチを作成&移動。main ブランチを汚さずに開発できます。

git merge ブランチ名 でブランチを統合します。Fast-forward は直線的な統合(ブランチを単純に前進させる)、3-way merge は分岐した2つを共通祖先と合わせて統合します。

コンフリクト(競合) は、同じファイルの同じ行を2ブランチで異なる変更した場合に発生します。Gitは自動解決できないため、<<<<<< ======= >>>>>> マーカーが挿入され、人間が正しい内容を選んで解消します。

コンフリクトを減らすには①こまめにコミットしてブランチの寿命を短くする②共有ファイルを触る前に最新の main をマージする、が実務での定石です。

git stash は「作業を一時退避」するコマンド。未コミットの変更を棚上げして他の作業に切り替え、後から git stash pop で復元できます。

重要ポイント

  • 機能ごとにブランチを切り、main を常にクリーンに保つ
  • コンフリクトは同じ行への並行変更で発生する
  • ブランチは短命に(長生きするほどコンフリクトリスクが増える)

理解度チェック

選ぶと即座に解説が表示されます。

`main` ブランチで作業中に緊急バグ対応が必要になった。今の作業は未完成でコミットしたくない。最善の手順は?

ヒントを見る

未コミットの変更を一時的に「退避」できるGitコマンドがあります。退避後に新しいブランチで対応するのが安全です。

コードレビュー演習

以下はGitのコンフリクト発生時にファイルに挿入されるマーカーです。

<<<<<<< HEAD
const greeting = 'こんにちは'
=======
const greeting = 'Hello'
>>>>>>> feature/english

このコンフリクトについて正しい説明は?

ヒントを見る

`HEAD` は現在のブランチの状態、`feature/english` はマージしようとしているブランチです。`=======` は何を区切っていますか?

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?