When you want to rebase a branch keeping merge commits you pass the --preserve-merges
flag. When you are merging unrelated history in git you need to pass the --allow-unrelated-histories
flag.
If you are doing git rebase --preserve-merges
when an existing merge comes from an unrelated history, it fails:
fatal: refusing to merge unrelated histories
If you try git rebase --preserve-merges --allow-unrelated-histories
it fails with:
error: unknown option 'allow-unrelated-histories'
Is there some other way to tell rebase to allow the merge?
Edit: here is a minimal reproduction: https://github.com/vossad01/rebase-unrelated-merge-reproduction
To reproduce checkout master
then execute:
git rebase --preserve-merges --onto origin/a-prime HEAD~2
The brute-force method is to force a common root -- since you're trying to rebase roots, with no content history, make a nonce empty commit and tell git that's the parent of the histories you're merging:
git rev-list --all --max-parents=0 \
| awk '{print $0,empty}' empty=`:|git mktree|xargs git commit-tree` \
> .git/info/grafts
git rebase here
rm .git/info/grafts