桜摘みされる材料で矛盾がある場合には、Gitはそれがいつものと同じことを行います。マージベースバージョンで
- ルック。
HEAD
バージョンをご覧ください。
- マージされるバージョンを見てください。
あなたは(私は)diff3
にmerge.conflictStyle
を設定する場合は、紛争地域で、むしろわずか2これら3のよりも、すべての3つのバージョンが表示されます。私はこれがGitの見た目を知るのに役立つことがわかりました。
なぜ私はBで直接追加されず、コミットを選んでいるときにCでの表示から何かを見ていますか?私はこれが紛争に関係していると推測しています。なぜなら、Aからの何も来ていない、紛争のまわりのものだけが来ているからです。問題は、Gitはマージベースは「何が変わっ」 - これは "あなたの現在にマージベースを比較した結果であるかHEAD
コミットして決定するためにコミット見つけなければならないということである。正しいのです
彼らが変更したもの "は、マージベースを"それらの "コミットと比較した結果です。
あなたは、このすべての最初に「枝」を述べた:
を私はブランチAのオフに作成された分岐Bを持っている私はチェリーピックしたいブランチBでのいくつかのコミットを作ります(これはAに類似している)ブランチCに入る。
実際、Gitはほとんどブランチを気にしません。 Gitはを気にするだけです。 - ブランチは主にGitに関係しているので、ブランチ名によってGitは個々のコミットを見つけることができます。これは、実際のコミットを引き出すのに役立ちます(そして、あなたが好きなら、私たち-およびこれらのコミットをGitの-見つけてみましょう分岐ラベルを含める):
H--I--J <-- branch-B
/
...--E--F--G <-- branch-A
\
K--L <-- branch-C
私は全体の布から、このグラフのアップを行った、とあなたのグラフに似ているかもしれませんが、これで奇妙な方法を説明することができますgit cherry-pick
Git内部のマージベースコミットを識別します。
git status
のように「ブランチC」の場合、HEAD
コミットはコミットL
、ブランチCの先端です。私たちは、その後git cherry-pick <hash-of-commit-I>
を実行すると、Gitはこれらの割り当てを行います
- マージベース=コミットH
- HEADまたは
--ours
は= L
--theirs
=私は
Gitはその後、デフ(意志コミットコミットgit diff
のように)コミットH
コミットに対してI
彼らは何をしたのかを見てみましょう。それは私たちが選ぶことを望む桜ですが、 diff commit H
に対してコミットL
、何を参照するかが変更され、競合が検出されました。
が競合がある場合は、Gitは、両側が実際に私たちは基本バージョンH
自体をマージ表示せずに、マージベースバージョンH
に何をしたか私たちに示しています。これには、望ましくないものが含まれます:H
からL
に「後方に」移動して「削除」したもの。 GitはマージベースのバージョンH
も表示していましたが、望ましくないものを「削除」していることが分かりました。