2011-10-27 9 views
3

私たちは、長寿命ブランチPROD、TEST et DEVを使用します。マージ時にリバートコミットを除外する

次のアプリケーションバージョンはDEVで開発され、テストの準備ができたらTESTにマージされ、リリースされたPRODにマージされます。

コミットの中にはテストブランチ(テストされているバージョンのバグ修正用)とPROD(メンテナンスバグ用)で直接作成されるものがあります。

PRODとTESTのこれらのコミットは、常に子ブランチに統合されます(つまり、PRODはTESTとDEVにマージされ、TESTはDEVにマージされます)。

しばらくすると、PRODでバグ修正がコミットされ、TESTとDEVでマージされてから元に戻されます。しかし、計画にはいくつかの変更があり、バグ修正はPRODのバージョンではなく、TESTのバージョンの一部でなければなりません。

ここに問題があります。私がPRODでコミットを元に戻すと、PRODがマージダウンされたときにTESTとDEVでも復帰が行われます。 PRODがマージされた後でも、PRODの変更を削除してTESTとDEVに保存するにはどうすればいいですか?私は現在、何

がTESTから、次のとおりです。

git merge PROD --no-commit 

これは、マージがTESTにコミットされる前に、私はPRODから元に戻した変更を破棄することができます。その後、特別な介入なしにTESTからDEVにマージします。 PRODからマージする唯一のコミットがリバースされたコミットである場合、これはファイルなしでマージされますが、これにもかかわらず動作します。

私のアプローチが正しいかどうか、これを行うより良い方法があるのだろうかと思っていましたか?

答えて

3

一般に、プロダクションブランチをテストブランチにマージするのは悪い考えです。通常はgit checkout PROD、次にgit merge TESTとなります。 (あなたがこの経験則についての詳細をお知りになりたい場合は、このblog post on merging and branchesは完全な正当化を提供します。)

誰かが誤ってTESTであることを意味したPRODで修正をコミットする場合は、あなたが上に固定し、おそらく桜ピックすべきTESTとし、それをPRODに戻してください。ステップバイステップで説明するために、PRODの修正を伴うコミットにオブジェクト名Aがあるとします。その後:あなたはPRODTESTをマージするとき今、修正はに統合されるべき

# cherry-pick the commit onto `TEST`. 
git checkout TEST 
git cherry-pick A 

# Now revert the commit on `PROD`: 
git checkout PROD 
git revert A 

(履歴によって、それは競合が生じる可能性がありますが、そう、これはバージョンの賛成で解決することは容易である必要があります。 TEST

+0

申し訳ありませんが、私はTESTをPRODにマージする提案を理解していません...それは逆ですが、私はTESTをPRODで最新に保ちたいと思います。リリース(その時点でTESTはPRODでマージされます)。 –

+0

あなたが言及しているブログ投稿を見ると、統合ブランチ(親)を機能ブランチ(子)にマージしないという完全な正当性がわかりません。 私たちの状況では、哲学的な観点からは、すべての子ブランチの目的は「機能をxxx(親ブランチの最新バージョンに)追加」であり、「機能をxxxに追加するからの分岐 ")。 TESTをPRODの古いコードベース(例:PRODのTESTの最後のマージ)にマージすることはできませんが、私たちはアプリのプロダクションバージョンが1つしかなく、顧客固有のバージョンはありません。 –

+0

私は、技術的な観点から、子育ての親が子育てよりも良かったと思っていました。 –

関連する問題