78

マスター ブランチと開発ブランチを備えた「Git Flow」ブランチ モデルを使用しています。私はメジャーな新しいリリースに取り組んでいるので、develop ブランチは master ブランチとは大きく異なります。これは、マスター ブランチでホットフィックスを作成し、それを開発にマージする必要があるときはいつでも問題を引き起こします。ほとんどの場合、衝突があり、それは本当に苦痛になっています。

これを管理する最善の方法は何ですか? 開発時に小さなホットフィックスの変更を手動で行い、マスターを開発にマージすることなく、準備ができたらすべてをマスターにマージする方が簡単です。これは可能ですか?

4

4 に答える 4

69

あるブランチから別のブランチにいくつかのコミットを取得する最も簡単な方法は、 cherry-pickingです。

の修正にmasterコミット ハッシュがあり、その修正プログラムをブランチにHASH取り込みたい場合は、 の後に. それでおしまい。develgit checkout develgit cherry-pick HASH

からへのすべての変更を取得する場合は、次のようにして実現できます。masterdevel

git checkout devel
git rebase master

逆のシナリオ (ブランチでの開発中にホットフィックスを作成し、完全に にマージされる前にdevelその修正を取り込みたい) の場合、ワークフローは非常に似ています。ホットフィックスに hash があると仮定して、次のようにします。masterdevelmasterHOTFIX_HASH

git checkout master
git cherry-pick HOTFIX_HASH

これで、コミットは と に存在しmasterますdevel。これを回避するには、次のように入力します

git checkout devel
git rebase master

コミットは にdevel既に存在するため、 から消えmasterます。

于 2011-08-24T14:42:50.043 に答える
20

この状況での私の一般的なワークフローは、問題を修正するbug-fixブランチを作成することです。master準備ができたら、それをにマージしてからmasterにマージmasterdevelopます。

これは、バグ修正が両方のブランチで変更する必要のあるコード間でほぼ1対1であることを前提としています。その場合は、いつでもgit merge -s ours mastermanページを参照)を試してdevelopdevelopブランチが優先されるようにすることができます。

私が取り組んでいるオープンソースプロジェクトのバグ修正リリースを管理するために、同様のプロセスを使用しています。 masterは常にバグ修正を適用する必要がある場所よりも進んでいるため、修正が必要なタグからブランチを作成し、修正とリリースを適用してから、タグを付け直して新しいタグをにマージしmasterます。これにより、バージョン番号が原因で競合が発生しますが、上記のコマンドで回避できます。

お役に立てば幸いです。

于 2011-08-24T14:13:48.653 に答える