1. ホーム
  2. git

[解決済み] このGitの警告にはどう対処すればよいのでしょうか?"異なるブランチを調整する方法を指定せずにプルすることは推奨されません"

2022-03-08 04:41:26

質問

の後に 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.

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 51.49 KiB | 850.00 KiB/s, done.

すると、正常にプルされました。しかし、それでも、このメッセージには疑問があります。

この場合、どうするのがベストなのでしょうか?

どのように解決するのですか?

<ブロッククオート

デフォルトのモードでは、git pull は git fetch と git merge FETCH_HEAD の省略形です。

を行うと git pull origin master ,
git pull はマージを実行し、多くの場合、マージコミットを作成します。したがって、デフォルトでは、リモートからのプルは ではない は無害な操作です。以前は存在しなかった新しいコミットSHAハッシュ値を作成することができます。この挙動はユーザーを混乱させます。なぜなら、一見無害なダウンロード操作に見えるものが、実際にはコミット履歴を予測不可能な方法で変更してしまうからです。

これを回避するためには

git pull --ff-only

(そうでない場合もあります。)どれがあなたの要件に合うか、読んでみてください。

git pull --ff-only の場合、Git は新しいコミットを作成せずに「早送り」できる場合にのみブランチを更新します。これができない場合は git pull --ff-only は、単にエラーメッセージを表示して終了します。

Gitクライアントを設定することで、常に --ff-only をデフォルトで使用することで、コマンドラインフラグを忘れてもこの動作になります。

git config --global pull.ff only

--global フラグは、あなたのマシン上のすべてのリポジトリに対して変更を適用します。今いるリポジトリに対してのみこの動作をさせたい場合は、このフラグを省略します。

より引用 こちら



この警告は Git 2.27 で追加されました。

警告の完成形はこのようなものです。

分岐を調整する方法を指定せずにプルすることは は推奨されません。このメッセージは、次のいずれかの方法で消すことができます。 コマンドを実行します。
git config pull.rebase false # マージ (デフォルトの戦略)
git config pull.rebase true # リベース
git config pull.ff only # 早送りのみ
git config" を "git config --global" に置き換えることで、デフォルトを設定することができます。 の優先順位は、すべてのリポジトリに適用されます。また、--rebase、--no-rebase を渡すこともできます。 または--ff-onlyを指定すると、設定されたデフォルトを上書きすることができます。 を起動します。

この警告では、オプションとして3つのコマンドが提示されていますが、これらはすべて警告を抑制するものです。しかし、それらは異なる目的を果たす。

git config pull.rebase false     # merge (the default strategy)

これはデフォルトの動作を維持し、警告を抑止します。

git config pull.rebase true      # rebase

これは実際にはリモートブランチの上にコミットするもので、ローカルとリモートの両方でひとつのブランチを維持します (デフォルトの動作では、ローカルとリモートのふたつのブランチが存在し、それらを結合するためにマージを実行します)。

git config pull.ff only          # fast-forward only

これは、ローカルブランチを fast-forward できる場合にのみ pull を実行します。そうでない場合は、単にエラーメッセージを出して中断します (そしてコミットも作成しません)。


更新しました。

Git 2.29以降を使用している場合は、Git 2.29以降を使用している場合は、Git 2.29以降を使用している場合は、以下のように pull.ff から false , true または only をクリックすると、警告が消えます。

git config pull.ff true

true - これはデフォルトの動作です。プルは可能であれば早送りされ、そうでなければマージされます。

git config pull.ff false

false - Pullは決して早送りされず、常にマージが作成されます。

git config pull.ff only

only - 可能な場合は早送りを行い、不可能な場合はエラーメッセージとともに操作を中断する。


に注目してみてはいかがでしょうか。 VonC の回答 こちら をクリックすると、今後のアップデートでこの機能が変更されることをお知らせします。