2017-02-22 4 views
1

ここでStackで多くの質問を確認しましたが、私のチームでGitflowワークフローを使用するにはどうすればよいか分かりませんでした。 マスターテストDEV:私たちは三つの主要な枝を持っている私のチームで生産準備が整っていない機能を使用せずにブランチをマスターにマージするにはどうすればいいですか?

workflow

:ここ

は、当社の支店です。すべての機能ブランチは、 devから分岐しています。それらが幾分安定したら、私たちは devにブランチします(開発者以外の開発者の中にはいくつかのテストを実行してからQ & Aに送信することができます)。

機能は、顧客のテストに行くには十分安定しているときに、我々は枝テストへの分岐DEVをマージします。承認後、試験支店はマスターにマージされます。

私の問題は、次のとおりです。いくつかのケースでは、我々はテストDEV、その後にマージされた4つの異なる分岐機能を持つことができます。しかし、何らかの理由で、テスト中の機能の1つはプロダクションに移行し、残りの3つは顧客の検証を待つ必要があります。

は、どのように私は(マスターにマージ)のみ承認された機能ををprod、およびマージ中にそのすべてのコミットを運ぶことなく、テストで3人を維持するために送ることができますか?

+1

[cherry picking](https://git-scm.com/docs/git-cherry-pick)を使用 –

+0

明確にするために、1,2,3,4の機能があります。 dev **と**テスト**。今度は、フィーチャー4を**テスト**から**マスター**に変更するだけで、それ以外はすべてそのまま維持しますか? –

+0

また、2つの紫色の点とマージし、もう1つの黄色の点に入る黄色の点がちょっと影になっています。私は3つのコミットを一緒にマージすることはできませんが、間違っている可能性があります。 –

答えて

0

git cherry-pickの標準的な使用例です。これは、選択したコミットとそのコミットの範囲を別のブランチに適用するためのコマンドです。あなたが適用する必要があるコミットのセットを正確に知っていると言ったので、それは仕事のための完璧なツールです。

git 1.7.2以降、コミットの範囲をチェリーピックすることができます。マスターに適用する必要がある機能4は、SHA1s 12345〜abc123のコミットによって表されます。その後、あなただけを実行してください

git checkout master 
git cherry-pick 12345^..abc123 

最初のコミットは以前のものでなければなりません。 ^は、範囲内で開始端が排他的であるという事実を処理します。詳細は、https://stackoverflow.com/a/1994491/2988730を参照してください。 gitの以前のバージョンの

、あなたは、それぞれが個別にコミット処理する必要があります:

git checkout master 
git cherry-pick 12345 
git cherry-pick df998 
... 
git cherry-pick abc123 

それはあなたがあなたのコミットの一部を分割する必要がないことが判明した場合は、パッチをチェックアウトするgit cherry-pick -nを使用し、詳細hereで説明されているように、git add -pを使用して、必要なチャンクを取得します。

git rebase --ontoを使用して同じタスクを実行することもできます。これには、対話的に行うことができるという利点があります。つまり、コミットを選択し、メッセージを変更し、チェリーピッキングよりもコンテンツをより詳細に制御できます。上にリンクされた答えはこれを詳細に行う方法を説明しています。

関連する問題