【Git】差分コミットがある状態で git pull を実行したら警告が表示されるようになった

Git

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. 端末1 で編集を行い、リポジトリA にコミット。その後、リモート環境にもプッシュ。
  2. 端末2 で 1. の修正を取り込まずに修正を行い、リポジトリA にコミット。競合が発生する修正内容だったので、リモート環境へのプッシュは行わず。
  3. 競合解消のため 端末2 で 1. の修正を git pull
  4. 上記エラーが発生。

手順 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 の知見を深めることが出来たので、ひとまずはよしとしたい。

参考