バージョン管理と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` はマージしようとしているブランチです。`=======` は何を区切っていますか?
スキルセルフチェック
このレッスンの内容をどの程度理解できましたか?