私たちの長年のgitブランチはMaster、UAT、Prodであり、新しい機能が最初にマスターにコミットされ、UATにプロモートされ(UATの準備ができたら)、Prodにプロモートされます(本番の準備ができたら)。現在、本番環境で修正プログラムを作成する機能が必要です。ProdブランチとリンクするHotfixブランチを作成することを計画しています。長時間実行されることに加えて、これらのブランチは、「非早送り」マージを使用してブランチを分離しておくという点で互いに分離されています(これにより、各ブランチでどのようなアクティビティが発生したかを簡単に確認できます。マスターからUATへのコードプロモーションなど)。
以下は、ホットフィックスが必要になった1つの通常の開発リリースのコミットのフローを示しています。開発は常に行われているため、マスターはコミットの大部分を占めています。UATとProdには、コードプロモーションを表すコミットのみがあります。ホットフィックスが必要な場合は、prodからhotfixにマージし、ホットフィックスブランチで変更を加え、ホットフィックス環境でテストしてから、prodにマージします。
hotfix ----------------------o-o---------- [1 commit for the merge prod->hotfix to get the latest state of prod into the hotfix environment, 1 commit of a bugfix to the hotfix environment]
prod --------------------o-----o-------- [1 commit for the promotion uat-> prod to get the latest uat-tested code into prod, 1 commit for the promotion of the bugfix hotfix->prod]
uat -----------------o----------------- [1 commit for the promotion of master->uat of 4 master commits]
master --o---o---o---o----o-o--o---o-o--o- [10 commits of new functionality]
ホットフィックスの後、ホットフィックスの変更は手動でマスターブランチに組み込まれることに注意してください。これは、ホットフィックスがリリースされた時間と現在の開発ラインの状態(数か月後になる可能性があります)によっては、コードがマスターとホットフィックスの間で大きく異なる可能性があり、ホットフィックスからマスターへの自動マージが意味をなさない場合があるためです。 。このため、UATからPRODへのマージ、PRODからHOTFIXへのマージ、およびHOTFIXからPRODへのマージでは、通常のgitマージを実行せず、代わりにgitmerge-sの戦略を使用します。あるブランチを別のブランチのようにするためのコマンド(具体的にはシミュレーション#3を実行します)。
この戦略は、「アップストリームからダウンストリームへのすべての変更をマージし、ダウンストリームの状態を消去して、アップストリームからの変更に正確に置き換えてください」と言います。したがって、この戦略を使用してUATからPRODに移行する場合、基本的に「PRODをUATとまったく同じように見せます」と言います。これにより、本番環境に入るのは、UATにあったコードの状態とまったく同じになります。
このような変更を本番環境に導入するブランチが2つある場合(1つは通常のリリース用、もう1つはホットフィックス用)、git merge -s theirs戦略は、この種のマージ戦略を実行する正しい方法ですか?
ホットフィックスブランチがない場合は、マスターからuat、prodへの通常の(早送りではない)マージを実行し、必要がないため、git merge-stheirs戦略を使用しません。