RepoX に BranchA と BranchB という 2 つのブランチがあるとします。RepoX には SubmoduleY というサブモジュールもあります。
BranchA にはリビジョン 'abc' に SubmoduleY があり、BranchB にはリビジョン 'def' に SubmoduleY があります。
BranchA を BranchB にマージしたいが、BranchB の SubmoduleY は元のリビジョンの 'def' を指しているままにしたいとします。これを行うにはいくつかの方法があります。
方法 1:
- BranchB をチェックアウトします。
- SubmoduleY をリビジョン 'abc' に移動して、実際のマージを簡単にします (現在、サブモジュール レベルでのマージは行いたくありません)。
- SubmoduleY の新しいリビジョンをコミットします (マージのためにフローティングにすることはできません)。
- BranchA を BranchB にマージします。競合を解決します。
- SubmoduleY をリビジョン 'def' に戻します。
- SubmoduleY の新しいリビジョンをコミットします。
- 変更をメイン リポジトリにプッシュします。
方法 2:
方法 1 と同じですが、ステップ 6 を実行する代わりに、リベースしてステップ 3 の余分なサブモジュール コミットを取り除きます。
どちらにも厄介な欠点があるようです。
方法 1 は、2 つの余分なコミットを履歴に入れます。
方法 2 では、サブモジュールのリビジョンに関係するすべての変更が忘れられます。これらのコミットは削除されるためです。したがって、その後のマージでは、いくつかの問題に再び対処する必要があります。
より良い方法はありますか?