コンテンツにスキップ

ブランチが main から 200 コミット遅れている。merge か rebase か?

原文

Interviewer:

Your branch is 200 commits behind main. What will you do?

Merge or rebase?

要約

200 コミット遅れたフィーチャーブランチの対応は「状況によって異なる」が正解。共有ブランチなら merge、個人ブランチで履歴を綺麗にしたいなら rebase。ただし 200 コミットの rebase は競合リスクが高く、interactive rebase でのスカッシュも選択肢。

回答

状況に応じて判断する。ただし原則は:

  • 個人ブランチ(まだ push していない / 他者が使っていない)git rebase main で履歴を整理
  • 共有ブランチ(他の人も使っている)git merge main で安全にマージ
  • 200コミット差があり競合が怖い → まず git merge main でコンフリクト解消後、必要なら git rebase -i でコミットを整理

解説

merge vs rebase の基本

観点 merge rebase
履歴 マージコミットが残る 線形履歴になる
安全性 元のコミットを変更しない コミット SHA が書き換わる
共有ブランチ ◎ 安全 ✗ 他者の環境が壊れる
個人ブランチ △ 履歴が複雑になる ◎ 推奨

200 コミット差の場合の実践的アドバイス

# まず差分を確認
git log --oneline main..HEAD   # 自分のコミット数
git log --oneline HEAD..main   # mainが進んでいるコミット数

# 個人ブランチの場合
git fetch origin
git rebase origin/main
# コンフリクトが出たら都度解消

# 競合が多すぎる場合は一旦mergeして整理
git merge origin/main
# 解消後に必要なら
git rebase -i HEAD~N   # 自分のコミットをまとめる

# 共有ブランチの場合
git merge origin/main   # 安全なマージ

200 コミット差で rebase する際のリスク

  • 競合(conflict)が大量に発生する可能性がある
  • 1コミットずつ競合解消が必要になり時間がかかる
  • git rebase --abort でいつでも中断可能

面接での答え方

「まずブランチが共有されているか確認します。個人ブランチなら git rebase main で線形履歴を保ちますが、200コミット差では競合リスクが高いので、先に git merge main で最新化してから git rebase -i でコミットを整理することも検討します。共有ブランチなら必ず git merge を選びます。」

→ 関連: mergeとrebaseの違い

リンク