2012-02-20 8 views
3

何らかの理由で、fliesにマージの競合がある場合、git cherry-pickが他のコミットを引き出すように見えます。 git mergetoolを使用しても、マージ競合したファイルを手動で編集することはできません。git cherry-pick他のコミットでマージ競合が発生しますか?

これはなぜ起こるのですか?

、私が何を意味するかを示し者は、単一のファイルfooで新鮮な新しいgitの1.7.4リポジトリを取るようにする:さんはbarと呼ばれるこの時点で新しいブランチを作成してみましょう

header 

footer 

。マスターに戻り、3つの変更を別々のコミットでこのファイルに追加しましょう。

1をコミットします。

header 

+add something 
+ 
footer 

は2をコミットします。

header 

add something 

+add something else 
+ 
footer 

3をコミットします。

header 

add something 

add something else 

+important change! 
+ 
footer 

コミットこの最後のは、我々は我々が引きたい決める事実の後、重要であるので、これはブランチのbargit cherry-pick <commit>に戻ります。

残念ながら、これはファイルfooで興味深いマージ競合生成:git mergetoolが正しいことを行うようだと、これを生成することを

注:

header 

+important change! 
+ 
footer 

なぜマージ衝突ファイルを行います私たちがチェリーピックを試したものの前にコミットを含む

答えて

0

Gitは懐疑的で、パッチが適用される適切なエッジが見つからない場合はマージしません。パッチは、存在しない行番号に適用されます。コミットしたパッチを調べて、それが意味をなさない行番号に適用されていることを確認します。チェリーピックであるので、ファイルがどのようになっているのか、そしてそのエントリを追加するのは問題ありません。希望は意味をなさない。

+0

これについての参考資料はありますか?私の質問はhttp://stackoverflow.com/q/7802252/7708に似ているようです。チェリーピックは、1回のコミットで「効果的にパッチを作る」と言っています。これは以前私がチェリーピックについて語ったことと一致しています。上記の答えはそれよりも複雑であることを示唆しています。 –

+0

それはもっと複雑ではありません。 Gitはパッチが適用される場所を調べ、エッジが一致しない場合は衝突とみなされます。マージした場合、gitは履歴を考慮してファイルが現在の状態にどのようになったかを考慮します。 –

関連する問題