3

何らかの理由で、ハエにマージの競合がある場合、git cherry-pick が他のコミットをプルするように見えます。これらは使用すると消えますgit mergetoolが、マージ競合ファイルを手動で編集することはできません。

なぜこれが起こるのか誰か知っていますか?

私の言いたいことを示すために、単一のファイルを持つ新しい git 1.7.4 リポジトリを見てみましょうfoo:

header

footer

この時点で、 という新しいブランチを作成しましょうbar。マスターに戻り、このファイルに 3 つの変更を別々のコミットで追加しましょう。

コミット 1:

header

+add something
+
footer

コミット 2:

header

add something

+add something else
+
footer

コミット 3:

header

add something

add something else

+important change!
+
footer

この最後のコミットは重要であるため、これをブランチbarに戻しgit cherry-pick <commit>、そのブランチでプルすることにしました。

残念ながら、これにより file で興味深いマージ競合が発生しますfoo

header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer

git mergetool正しいことをしているように見え、これを生成することに注意してください:

header

+important change!
+
footer

マージ競合ファイルに、選択しようとしたコミットよりも前のコミットが含まれているのはなぜですか?

4

1 に答える 1

0

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

于 2012-02-21T00:57:33.833 に答える