マスターブランチと開発ブランチを備えた「Git Flow」ブランチモデルを使用しています。私はメジャーな新しいリリースに取り組んでいるので、私の開発ブランチはマスターブランチとは大きく異なります。これにより、masterブランチでホットフィックスを作成し、それを再び開発にマージする必要があるときに問題が発生します。ほとんど常に対立があり、それは本当の痛みになりつつあります。
これを管理する最良の方法は何ですか?マスターを開発にマージせずに準備ができたら、開発時に手動で小さな修正プログラムを変更し、すべてをマスターにマージする方が簡単です。これは可能ですか?
あるブランチから別のブランチへのsomeコミットを取得する最も簡単な方法は cherry-picking です。
master
の修正にコミットハッシュHASH
があり、その修正プログラムをdevel
ブランチに取り込みたい場合、git checkout devel
に続いてgit cherry-pick HASH
。それでおしまい。
master
からdevel
にallの変更を取得したい場合は、
git checkout devel
git rebase master
反対のシナリオがある場合(開発中にdevel
ブランチで修正プログラムを作成し、master
がdevel
に完全にマージされる前にその修正をmaster
に取り込みたい場合] _)、ワークフローは非常に似ています。修正プログラムにハッシュがあると仮定するHOTFIX_HASH
、 これを行う:
git checkout master
git cherry-pick HOTFIX_HASH
現在、コミットはmaster
およびdevel
にあります。これを回避するには、次を入力します
git checkout devel
git rebase master
devel
に既に存在するため、コミットはmaster
から消えます。
この状況での私の一般的なワークフローは、bug-fix
問題を修正するmaster
のブランチ。準備ができたら、それをmaster
にマージしてからmaster
をdevelop
にマージします。
これは、バグ修正が両方のブランチで変更する必要があるコード間でほぼ1対1であると想定しています。その場合は、常にgit merge -s ours master
( man-page を参照)をdevelop
に入れて、develop
ブランチが優先されます。
私が取り組んでいるオープンソースプロジェクトのバグ修正リリースを管理するために、同様のプロセスを使用しています。 master
は常にバグ修正を適用する必要がある場所よりも先にあるため、修正が必要なタグからブランチを作成し、修正とリリースを適用してから、新しいタグをmaster
。これはバージョン番号のために競合を引き起こしますが、上記のコマンドで回避できます。
お役に立てば幸いです。
私は通常これに従います ガイド これはほとんどの場合非常によく合い、競合やbig変更の問題の市長を避けます。
feature
ブランチで作業して、development
ブランチの作成前にのみそれらをrelease
にマージできる場合(実際にリリースを準備していることを意味します)...発生するマージの競合のほとんど。
feature-breaking
ブランチで重大な変更が発生するため、このfeature-breaking
ブランチが開発にマージされる時点で競合が発生する可能性があるのは1回だけです。また、いつでもdevelopment
をrelease
ブランチにマージして、最新の状態に保つことができます。
development
すべてのhotfix-branch
esをマージすることで、競合を最小限に抑えるか、まったく競合させないようにすることもできます。
前にリンクで共有したガイドは、development
からmaster
に、または後方にマージしないことを重視しています。リリースは常にrelease
ブランチを介して処理します。