git pull
を実行したらエラーが発生したのでメモ。
git pull を実行したら下記のエラーが表示された
ローカル/リモートリポジトリ間で差分コミットがある場合に発生。
$ git pull origin main
* branch main -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
発生の経緯としては、以下の通り。
- 端末1 で編集を行い、リポジトリA にコミット。その後、リモート環境にもプッシュ。
- 端末2 で 1. の修正を取り込まずに修正を行い、リポジトリA にコミット。競合が発生する修正内容だったので、リモート環境へのプッシュは行わず。
- 競合解消のため 端末2 で 1. の修正を
git pull
- 上記エラーが発生。
手順 3. の期待動作は "自動マージ不可の競合ファイル発生" の警告が表示されることで、その後は競合ファイルの手動修正を行って、マージコミットを行う予定だった。
Git のバージョンアップで警告が出るようになったらしい
調べたところ、2020年6月1日リリースの Git 2.27.0 以降、警告を表示するようになったらしい。pull
する際はオプションで --rebase
や --ff-only
を指定できるが、そのようなオプションありきで実行したいユーザーが操作ミスをしてしまった時に、意図しないマージコミットを防止することを目的としているようだ。
解決方法
警告メッセージの内容としては、pull
実行時はオプションを指定するか、pull
実行時の動作を Git の設定ファイルに設定しておいてくれれば問題ない、とのこと。自分としては、pull
実行時はデフォルトの動作としたいので、下記コマンドで Git の設定ファイルを更新。その後 pull
したところ、期待通りの動作となったことを確認できた。
$ git config pull.rebase false
余談
今まで長い間 Git を使用しているが、このような警告が表示されたのは今回が初めて。2020年6月以降に参画したプロジェクトでは、最新の Git をインストールしていたはずだし、競合となるであろうコミットを pull
することも頻繁にあったのに、警告が表示されなかったのはなぜなんだろう?というのが若干後味悪く感じた。(少なくとも config
ファイルで設定していた記憶もまったくない。となると、実は古いバージョンの Git を使っていたのだろうか?)
3年遅れで今更感な記事になってしまったが、また少し Git の知見を深めることが出来たので、ひとまずはよしとしたい。