できない.dev

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 を一度設定すれば以降は出なくなる。

よくある原因

  1. 2.27 の挙動変更: 以前は暗黙にマージしていたが、明示設定を促すようになった。
  2. 分岐している: git pull の前にリモートにもローカルにも別々のコミットがある。
  3. 未設定: pull.rebasepull.ff を設定した記憶がない。

解決策

1. マージで進める(既定に近い挙動)

git config pull.rebase false

分岐時はマージコミットを作って統合する。
チーム開発で無難な既定。

2. リベースで直線化する

git config pull.rebase true

ローカルのコミットをリモートの先頭に載せ直し、履歴を直線に保つ。

3. 早送りだけ許す

git config pull.ff only

fast-forward できるときだけ pull し、分岐していれば失敗させて手動対応にする。

4. その場限りで指定する

git pull --no-rebase   # マージ
git pull --rebase      # リベース
git pull --ff-only     # 早送りのみ

グローバルに固定したくない場合は、コマンドのオプションで都度指定する。--global を付ければ全リポジトリ共通の既定にできる。

この記事は役立ちましたか?