後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.
プルは成功したようですが、確信はありません。
これを修正するにはどうすればいいでしょうか?
ベストアンサー1
デフォルト モードでは、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
これは実際にはリモート ブランチの上にコミットし、ローカルとリモートの両方で 1 つのブランチを維持します (ローカルとリモートの 2 つの異なるブランチが関係し、2 つを結合するためにマージが実行されるデフォルトの動作とは異なります)。
git config pull.ff only # fast-forward only
これは、ローカル ブランチを高速転送できる場合にのみプルを実行します。そうでない場合は、エラー メッセージが表示されて中止されます (コミットは作成されません)。
アップデート1:
Git 2.29 以降を使用している場合は、または を設定しpull.ff
て警告を消すことができます。false
true
only
git config pull.ff true
true
- これはデフォルトの動作です。プルは可能な場合は早送りされ、そうでない場合はマージされます。
git config pull.ff false
false
- プルは早送りされず、常にマージが作成されます。
git config pull.ff only
only
- 可能な場合はプルが早送りされ、そうでない場合はエラー メッセージが表示されて操作が中止されます。
更新 2:
バージョンまでは、この新しく実装された機能にバグがあり、2.35
ユーザーがコマンドで 3 つのフラグのいずれかを渡しても、Git がこの警告を表示していましたgit pull
。この問題は修正されました。Git をバージョン2.36
以上に更新することを検討してください。
ノート:
読むこの非常によく書かれた回答によるトレック舞台裏で実際に何が起こっているのかをより明確に把握し、どのオプションが自分にとって最も適切かを理解します。
注目しておきたいのはヴォンCの答えここ今後のアップデートでこの機能に加えられる変更に関する最新情報については、こちらをご覧ください。