Skip to content

Gitのブランチ競合エラー:Pulling without specifying how to reconcile divergent branches

問題点

git pull origin master を実行した際、以下のような警告メッセージが表示される場合があります:

warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:

  git config pull.rebase false  # merge (the default strategy)
  git config pull.rebase true   # rebase
  git config pull.ff only       # fast-forward only

You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.

このエラーは、ローカルブランチとリモートブランチが「分岐(divergent)」している状態、つまり両方に独自のコミット履歴が存在し、Gitが自動的にマージできない状況で発生します。

重要な注意点

この警告メッセージはGit 2.27以降で導入され、ブランチの統合方法を明確に指定することを推奨するためのものです。

解決策

方法1: 設定でデフォルトの動作を指定する

最も一般的な解決策は、Gitの設定でプルの動作を明示的に指定することです:

bash
git config --global pull.rebase false
bash
git config --global pull.rebase true
bash
git config --global pull.ff only

各オプションの意味:

  • pull.rebase false:マージ戦略(デフォルト)。マージコミットを作成します
  • pull.rebase true:リベース戦略。ローカルのコミットをリモートの変更の上に再適用します
  • pull.ff only:ファストフォワード可能な場合のみ更新、それ以外は中止します

おすすめ

pull.ff only を設定すると、意図しないマージコミットが作成されるのを防げるため、履歴をクリーンに保つことができます。

方法2: コマンドラインで一時的に指定する

設定を変更せずに、その場限りの対応をしたい場合:

bash
git pull --no-rebase
bash
git pull --rebase
bash
git pull --ff-only

方法3: 手動でマージ/リベースを行う

より細かい制御が必要な場合:

bash
# リモートの変更を取得
git fetch origin

# リベースしてローカルの変更を適用
git rebase origin/master

# またはマージを行う
git merge origin/master

エラーの根本原因と予防策

このエラーが発生する主な原因は:

  1. 同じブランチで複数人が並行して作業している
  2. リモートブランチがリベースされた
  3. ローカルでコミットした後、リモートの変更をプルせずに作業を続けた

注意

git reset --hard origin/master のようなコマンドは、ローカルの変更を完全に破棄します。実行前には必ず変更内容を確認してください。

Gitバージョンによる挙動の違い

  • Git 2.29以上pull.ff 設定が正式にサポートされ、警告が抑制されます
  • Git 2.34以上:分岐ブランチの場合、デフォルトでエラーになり警告ではなくなります
  • Git 2.35以上:既に最新の場合のプル操作が正しく処理されるようになりました

トラブルシューティング

どうしても解決しない場合

bash
# 現在のブランチを別名でバックアップ
git checkout -b backup-branch

# メインブランチをリモートの状態にリセット
git checkout main
git fetch origin
git reset --hard origin/main

# バックアップから必要な変更をチェリーピック
git cherry-pick <commit-hash>

GUIツールを使用する場合

Visual Studio、IntelliJ IDEA、SourceTreeなどのGUIツールでも、対応する設定項目から同じように設定できます。通常は「Git設定」または「リポジトリ設定」内にオプションがあります。

まとめ

Gitのブランチ分岐警告は、実際にはエラーではなく、より明確な統合方法の指定を求める注意喚起です。プロジェクトのワークフローに合わせて適切な設定を選択することで、このメッセージを解消し、より効率的なコラボレーションが可能になります。

ベストプラクティス

  • チーム全体で統一したプル戦略を採用する
  • 定期的にリモートの変更をプルしてローカルを更新する
  • 複雑なマージ競合が発生した場合は早めにチームメンバーと相談する

適切な設定により、Gitのブランチ管理はより予測可能で安全なものになります。