ブランチとマージ

並行開発でメインコードを守りながら新機能を開発する。

平行世界 (Parallel Universe)

ブランチは「パラレルワールド」です。 本編(main)の世界線を傷つけずに、別の世界線(feature/new-feature)で自由に実験できます。 実験がうまくいったら、世界線を統合(マージ)して本編に取り込みます。 失敗したら?世界線ごと消してなかったことにできます(ブランチ削除)。

用語集

ブランチ
開発の分岐。並行作業の単位。
マージ
2つのブランチを統合する。
コンフリクト
同じ箇所の変更が競合。
Fast-forward
直線的なマージ(分岐なし)。

ブランチの作成と切り替え

create-branch.sh
# Create a new branch for feature development
git branch feature/user-authentication
# Switch to the new branch
git switch feature/user-authentication
# Create and switch in one command (recommended)
git switch -c feature/shopping-cart
実行結果
Switched to a new branch 'feature/shopping-cart'
Tip: ブランチ名は feature/, fix/, docs/ などのプレフィックスをつけると分かりやすい。

マージ(統合)

開発が完了したら、mainブランチにマージします。

merge-branch.sh
# First, switch back to main
git switch main
# Merge the feature branch
git merge feature/user-authentication
# Delete the branch after successful merge
git branch -d feature/user-authentication
Bad
Terminal window
# Bad: Working directly on main
git switch main
# ... edit files ...
git commit -m "Add login"
# Breaks production if buggy!
Good
Terminal window
# Good: Work on feature branch
git switch -c feature/login
# ... edit files ...
git commit -m "feat: Add login"
git switch main
git merge feature/login # Safe merge

コンフリクト(競合)の解消

同じファイルの同じ箇所を複数人が編集すると、競合が発生します。

コンフリクトマーカー
<<<<<<< HEAD
// Current branch (main) version
function login(user) {
return authenticate(user);
}
=======
// Incoming branch (feature/login) version
function login(user, password) {
return validate(user, password);
}
>>>>>>> feature/login
解消手順:
  1. <<<, ===, >>> マーカーを確認
  2. 正しい内容に手動で編集
  3. git add <file>
  4. git commit

解消後

解消済みコード
// Manually resolved: Combined both approaches
function login(user, password) {
if (!validate(user, password)) {
return false;
}
return authenticate(user);
}

合格ライン

git switch -c でブランチを作成できる
git merge でマージできる
コンフリクトマーカーを読んで解消できる
ブランチ命名規則を説明できる

演習課題

課題1: ブランチ作成とマージ
feature/practice ブランチを作成し、ファイルを変更してコミット後、main にマージしてください。
課題2: コンフリクト解消
意図的にコンフリクトを起こし、コンフリクトマーカーを編集して解消してください。

関連ページ