web-dev-qa-db-ja.com

ブランチの開発時の修正プログラムの管理は、マスターとは非常に異なりますか?

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

これを管理する最良の方法は何ですか?マスターを開発にマージせずに準備ができたら、開発時に手動で小さな修正プログラムを変更し、すべてをマスターにマージする方が簡単です。これは可能ですか?

55
TaylorOtwell

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

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

masterからdevelallの変更を取得したい場合は、

git checkout devel
git rebase master

反対のシナリオがある場合(開発中にdevelブランチで修正プログラムを作成し、masterdevelに完全にマージされる前にその修正をmasterに取り込みたい場合] _)、ワークフローは非常に似ています。修正プログラムにハッシュがあると仮定するHOTFIX_HASH、 これを行う:

git checkout master
git cherry-pick HOTFIX_HASH

現在、コミットはmasterおよびdevelにあります。これを回避するには、次を入力します

git checkout devel
git rebase master

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

51
eckes

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

これは、バグ修正が両方のブランチで変更する必要があるコード間でほぼ1対1であると想定しています。その場合は、常にgit merge -s ours masterman-page を参照)をdevelopに入れて、developブランチが優先されます。

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

お役に立てば幸いです。

11
tswicegood

私は通常これに従います ガイド これはほとんどの場合非常によく合い、競合やbig変更の問題の市長を避けます。

featureブランチで作業して、developmentブランチの作成前にのみそれらをreleaseにマージできる場合(実際にリリースを準備していることを意味します)...発生するマージの競合のほとんど。

feature-breakingブランチで重大な変更が発生するため、このfeature-breakingブランチが開発にマージされる時点で競合が発生する可能性があるのは1回だけです。また、いつでもdevelopmentreleaseブランチにマージして、最新の状態に保つことができます。

developmentすべてのhotfix-branchesをマージすることで、競合を最小限に抑えるか、まったく競合させないようにすることもできます。

前にリンクで共有したガイドは、developmentからmasterに、または後方にマージしないことを重視しています。リリースは常にreleaseブランチを介して処理します。

6
Cristian Douce