git pullすると「warning: Pulling without specifying how to reconcile divergent branches is
discouraged.」という警告メッセージが発生するようになりました。弊社内でも戸惑うメンバーがいましたので、gitの挙動を踏まえながら、この警告メッセージについて調査してみたいと思います。この警告メッセージは、gitのバージョン「git version 2.27.0」から発生するようになりました。

ワーニングメッセージ

用語のおさらい

gitを利用している場合、ローカルリポジトリとリモートリポジトリという2種類のリポジトリを使い分けながら、作業をおこなっていると思います。ローカルリポジトリは作業者のPCにあるリポジトリ、リモートリポジトリは共用のサーバに設置されているリポジトリです。普段の作業イメージでは、ローカルで追加した機能などをローカルリポジトリへ反映して、リモートリポジトリへ取り込むというような流れで作業をしています。

ローカルリポジトリには、以下のものが含まれています。

  • ワーキングツリー ・・・ 変更しているファイルのこと
  • インデックス ・・・ git add で管理しているもの
  • ローカルブランチ ・・・ 変更した内容を反映しているブランチ
  • リモート追跡ブランチ(リモートのコピー)・・・リモートブランチのコピー

git pullの挙動について

git pull実行した際には、下記の動作をします。

  1. git fetch を実行する。
  2. 現在のブランチに対して、 事前に git fetch で取得したHEADをマージするように git mergeを実行する。

git pull --rebaseを実行した際には、上記.2の挙動がmergeではなく、reabseを使ったものになります。

git version 2.27.0では、pull.rebase の設定がなくて且つ pull 実行時のオプションも指定されなかった場合にはマージコミットを利用して解決するという挙動だったのですが、この挙動が操作に慣れていないユーザが困ることが多いようで、2.27.0では、明示的に指定してする方針になったようです。今までの挙動で問題ない方は、git config --global pull.rebase falseコマンドを実行して、gitconfigに設定してしまって良い気がします。

おわり

今回は、gitのバージョンアップで発生した警告について記載しました。最近では、エンジニアやデザイナ、その他など非常に多くの人がgitクライントなどを利用していることもあり、git自身もわかりやすさを取り入れているという印象を持ちました。