2016-10-14 26 views
0

私はgit repoのログをコーミングしていますが、コメントにリストされているコンフリクトのあるマージコミットを見つけていますが、実際にはマージコミットの一部として変更されたファイルはありません。いつ、どのようにこれが起こりますか?マージには2つの親があり、それらはまったく違うので、どのようにしてファイルの変更がパッチにリストされないのですか?マージでパッチに変更が反映されないのはなぜですか?

+0

「ファイルが実際にマージコミットの一部として変更されていない」ことをどのように知っていますか?あなたはマージコミットで 'git show'をしますか? 'merge commit'によって導入された変更を表示するには' git show .. 'を実行する必要があります。 –

+0

マージコミットで 'git show'を実行し、ファイルをリストしません。 2つの親コミットで 'git show .. 'を実行すると、特定のファイルに4行の追加が表示されます。ただし、マージコミットからそのファイルを見ると、それらの4行は存在しません。 – Sio

答えて

2

マージマージコミット(2人以上の1人以上の親)は、「結合された差分」を示します。 documentation for git showはむしろ隠されたこのキーの段落があります:

なお組み合わせデフリストのすべての親から変更されたファイルのみ。

git diff 1111111 3333333 

READMEfile1.txtの両方への変更を示すだろう、と::

git diff 2222222 3333333 

は変化を示すだろうことは3333333...は両親1111111...2222222...、それが持っているマージと仮定し、ある

READMEfile2.txtの両方に送信します。さらに、READMEの変更が異なるであるため、マージで両方の変更を組み合わせなければならないとします。次に:(3333333:README1111111:README2222222:READMEの両方が異なるため)

git show 3333333 

はあなたにREADMEが表示されますが、それは1111111のいずれかのよう3333333に同じだかのでないはあなたにfile1.txtまたはfile2.txt(どちらかが表示されます2222222)。

この場合(競合するファイル)は、各ファイルの複数の親のバージョンのうちの1つのみを選択することによって競合が解決されたことを意味します。

git log -pを使用するとさらに悪化します。これは、マージコミット - デフォルトでは完全に差分リストをスキップします。

git log -pを含むdiff表示コマンドのいずれかが、マージwith any of -c, --cc, or -mを表示する方法を変更できます。 (--ccオプションがgit showのデフォルトです。2つの-ccの前にある文字が、cmの前に一つだけがあることに注意してください。)ただし、唯一-mは実際にあなたにを示しすべて違い、(実際には)コミットを複数の仮想コミットに分割します。それぞれにはNのいずれかの親があります。

関連する問題