2012-08-29 17 views
6

マスターの生産ブランチがあります。マスターブランチには現在の開発が含まれ、プロダクションブランチにはサーバー上で実行されているものが含まれます。時折、両方のブランチに適用する必要がある重要なバグフィックスがあります。チェリーピッキングの代替品

現時点では、マスターブランチで作成したコミットをチェリーピックするだけです。しかし、ブランチをマージしているときに、時にはマージ競合が発生します。 他に選択肢がありますか?

+0

これは本当に "git"という質問ではありません。表示されているマージの競合は、コードのプロパティです(プロダクションコードがデプロイされてから分岐しています)。 gitのマージツール(または任意のマージツール)は、あなたの心を読んで、マスターの変更されたコードであなたが本当に "意味する"ものを決めることができません。ツールが動く限り、 'git am'はチェリーピックよりもうまくいくかもしれません。コミットデータを失うことなくマージを編集することができるからです。 –

答えて

7

あなたはmasterのマージベースで(のはbugfix-aそれを呼びましょう)新しいブランチを作成することができますし、production

git checkout -b bugfix-a $(git merge-base master production) 

この新しいマージ、そして、その枝に

>>/path/to/file echo 'this fixes the bug' 
git add /path/to/file 
git commit -m 'important bugfix' 

をあなたのバグ修正を適用します。マスターとプロダクションの両方にブランチ:

git checkout master 
git merge bugfix-a 
git checkout production 
git merge bugfix-a 

こうすれば、後でマスターとプロダクションをマージできるはずです。Gitは、どのコミットを選ぶかを判断するのに十分なほど巧妙です。

(モノトーン - はい、それはGitのではないのですが - このワークフローdaggy fixesを呼び出す)

4

各修正プログラム用に別のブランチを作成し、あなたの開発ブランチと本番ブランチの両方にそれをマージします。

gitflowモデルは、一般的には本当によく働く、と私はこれをチェックアウトしてお勧めします:http://nvie.com/posts/a-successful-git-branching-model/

masterブランチが彼らの開発ブランチに類似しており、そして本番の枝が自分の主人に似ている

enter image description here

3

Gitflowを使用できます。私は 'ホットフィックス'あなたのシナリオを処理すると思います。