Lets say I have two branches in RepoX called BranchA and BranchB. RepoX also has a submodule called SubmoduleY.
BranchA has SubmoduleY at revision 'abc', BranchB has SubmoduleY at revision 'def'.
Say I want to merge BranchA into BranchB, but I want to leave BranchB's SubmoduleY pointing to its original revision of 'def'. I see a couple ways of doing this:
Method 1:
- Checkout BranchB.
- Move SubmoduleY to revision 'abc' to make the actual merge painless (we don't want to do any merging at the submodule level right now).
- Commit the new revision for SubmoduleY (we can't have it floating for the merge).
- Merge BranchA into BranchB. Resolve any conflicts.
- Move SubmoduleY back to revision 'def'.
- Commit the new revision for SubmoduleY.
- Push changes up to the main repo.
Method 2:
Same as method 1, but instead of doing step 6, rebase and get rid of the extra submodule commit from step 3.
Both seem to have annoying drawbacks:
Method 1 puts two extra commits into history.
Method 2 forgets any changes to do with submodule revisions because those commits get removed. Therefore, any merges later on will have to deal with some problems again.
Is there a better way?