2012-04-07 13 views
3

をコミットするが、ここにある:CherrypickはナイーブGitの質問かもしれません注文

プルリクエストを行う前に、私は通常、上流に最新のコミットから新しいブランチを作成してからの重要なコミットをチェリー選びます私の開発枝。次に、私の新しいブランチからリモートリポジトリにpull-requestを行います。

しかし、私はマージ競合が嫌いです(ただし、git mergetoolは発生時に多くの助けになります)。私はチェリーピックの注文によって引き起こされたこれらの紛争のいくつかを疑う。私は通常、最も古いコミットから最新のコミットのセットをチェリーピックします。これは正しいアプローチですか?または、コミット順はgitでは問題ありませんか?

チェリーピッキング中のマージの競合を最小限に抑えるための方法はありますか?

答えて

7

コミットを確実に順番に選択する必要があります。あなたがしなければ、それらは適用されないかもしれません - あるコミットがfoo.cを追加し、次のものがそれを修正すると想像してください。明らかに彼らは順不同で働くつもりはない。一般的に、たとえそれが明らかではないとしても、開発の論理的な流れがあり、あなたはそれを混乱させたくありません。つまり、私はあなたが手動でブランチとチェリーピッキングを作成している理由はわかりません。それはgit pull --rebaseに相当します(コミットをスキップしていない限り)。

チェリーピッキング時にマージの競合が発生している場合は、開発プロセスが理想的ではないという兆候です。これは、開発ブランチで作業していることも上流に変更されていることを意味します。他の人が作業している同じコードを使って作業しないで、または開発の最中まで待つのではなく、アップストリームからもっと頻繁に(おそらくpull --rebase)引っ張って自分自身を助けることができるかもしれません。

+0

非常に参考になりました。 – systemsfault

2

もちろん、コミット注文は重要です。コミットAが最初に導入されたものをコミットBが変更した場合、コミットAが適用されるまでコミットBを適用することはできません。

あなたのワークフローは奇妙です。アップストリームのブランチの内容の上にブランチを再構築するにはブランチをgit rebaseにするか、アップストリームのブランチの内容をブランチに再構築するか、またはgit mergeをブランチにする必要があります。それはチェリーピックの作業を避け、実際にgitに自動的に衝突を解決する良い機会を与えます。

関連する問題