git pull
マージの競合の可能性を許さない場合のオプションはありますか? マージ戦略を見てきましたが、この説明を満たすものはないようです。次のようなオプションを探していますgit pull --quit_if_possible_merge
基本的に、解決中に一時的にサイトをダウンさせるマージの競合のリスクなしに、本番サイトにプルするためのコマンドが必要です。
どうですか:
git pull --ff-only
他の回答で述べられていることが真実である場合、これはまさに望ましい効果をもたらすはずです。いいえ?
--ff-only
フラグは「早送り」を表します。これは、Git がマージ ブランチの 1 つに他のブランチのすべてのコミットが含まれる状況 (厳密なスーパーセット) を指す方法です。これは、マージの競合が発生しないことを意味するため、特別です。先のブランチでのコミットは、他のブランチに追加されるだけで、誰もが満足しています。
他の人がすでに述べたように、ローカルリポジトリで何かをコミットした場合にのみ、マージの競合が発生します。そうしないと、マージの競合は発生しません。
何もコミットしていないが、ローカルの git リポジトリ内で作業していた場合、つまり、ファイルを変更したり、新しいファイルを作成したりしたgit pull
場合でも、変更されたファイルを更新する必要があるときに問題が発生します。- したがって、ローカル リポジトリ内で直接作業しないでください。問題ありません。
次に、ローカル リポジトリ内で作業することを主張しgit pull
、ファイルを更新することを考えます。変更したファイルをどうするかを決める必要があります。ローカルでの変更をすべて破棄し、リモート リポジトリにあるファイルだけを取得する場合は、git fetch;git reset --hard @{u}
.
Git でマージする場合、次のタイプのマージを実行できます。
git merge -ff-only branch_to_merge_into_this_one
これは、Git が早送りアプローチを使用してマージを完了できることを確認した場合にのみ、マージを完了します。そうしないと、Git はマージを中止し、マージが早送りできないことを知らせます。
したがって、マージの競合が発生しないことを保証できる早送りマージとは何ですか。早送りマージは、問題の 2 つのブランチのコミット履歴を確認し (たとえば、A と B をマージして B にマージしている場合)、B に A の完全なコミット履歴が含まれているかどうかを確認します。さらに、その A には含まれていません。 B の一部ではないすべてのコミット。これは、B でマージする場合、B の新しいコミットをすべて A の HEAD の上に積み重ねてから、A の HEAD を B の HEAD がある場所に移動することによってマージするのが保存されることを意味します。このように、変更セットは直線的に適用され、編集が競合する可能性はありません。これは、Git のコミット履歴に十分な情報があり、どの変更を行い、どの変更を望まないかを責任を持って判断できるためです。