Git pull で「Need to specify how to reconcile divergent branches」が消えない
Git 2.27 以降、ローカルとリモートが分岐していると pull の統合方法を明示しないと止まる。
pull.rebase を設定するか、その場でオプションを付ける。
公開:
要約
fatal: Need to specify how to reconcile divergent branches は、Git 2.27 以降で git pull したときに、ローカルとリモートが分岐していて fast-forward できないのに、統合方法(マージかリベースか)が設定されていないと出る。
不具合ではなく、既定を曖昧にしないための仕様変更。pull.rebase を一度設定すれば以降は出なくなる。
よくある原因
- 2.27 の挙動変更: 以前は暗黙にマージしていたが、明示設定を促すようになった。
- 分岐している:
git pullの前にリモートにもローカルにも別々のコミットがある。 - 未設定:
pull.rebaseやpull.ffを設定した記憶がない。
解決策
1. マージで進める(既定に近い挙動)
git config pull.rebase false分岐時はマージコミットを作って統合する。
チーム開発で無難な既定。
2. リベースで直線化する
git config pull.rebase trueローカルのコミットをリモートの先頭に載せ直し、履歴を直線に保つ。
3. 早送りだけ許す
git config pull.ff onlyfast-forward できるときだけ pull し、分岐していれば失敗させて手動対応にする。
4. その場限りで指定する
git pull --no-rebase # マージ
git pull --rebase # リベース
git pull --ff-only # 早送りのみグローバルに固定したくない場合は、コマンドのオプションで都度指定する。--global を付ければ全リポジトリ共通の既定にできる。