Git refusing to merge unrelated histories on rebase - Stack Overflow
Simple question: how to blend two branches with diff commit histories
git - Merging two different repositories with different history - Stack Overflow
Merging unrelated histories
You can use --allow-unrelated-histories to force the merge to happen.
The reason behind this is that default behavior has changed since Git 2.9:
"git merge" used to allow merging two branches that have no common base by default, which led to a brand new history of an existing project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the existing project. The command has been taught not to allow this by default, with an escape hatch
--allow-unrelated-historiesoption to be used in a rare event that merges histories of two projects that started their lives independently.
See the Git release changelog for more information.
More information can be found in this answer.
In my case, the error was just fatal: refusing to merge unrelated histories on every try, especially the first pull request after remotely adding a Git repository.
Using the --allow-unrelated-histories flag worked with a pull request in this way:
git pull origin branchname --allow-unrelated-histories
As per 2.9.0 release notes - git pull has been taught to pass the --allow-unrelated-histories option to underlying git merge
I have a dev branch I need to merge into my main branch. The dev branch I need to merge from a specific commit from Mar 1. The main branch has different commits up to Mar 20 and must be missing a lot from the dev branch. What is the best way of doing this? Trying to research it but the examples are obviously very generic so I figured I'd ask my specific problem in hopes of guidance.
My suggestion:
It can be done in D1's repo or D2's repo:
For D2's side
git remote add [name-for-D1-repo] [D1-repo-url]
git fetch --all
git merge [name-for-D1-repo]/[D1-working-branch] --allow-unrelated-histories
My suggestion is just to get one of the repo as principal (let's said first-repo), create a branch there (lets said the-other-repo), then dump/copy (no git command, just a plain copy) the tip of the-other-repo in the working directory of the first-repo being the the-other-repo as HEAD, commit the changes, and the merge the-other-repo branch into the HEAD of the "master" branch of the first-repo.
If want to keep the commits history, you could do a rebase.
I created the following repository on GitHub: https://github.com/james/test.git.
Then I proceeded with:
user@guest:~/.../gits$ git config --global init.defaultBranch main user@guest:~/.../gits$ mkdir test && cd test user@guest:~/.../test$ echo "# test" >> README.md user@guest:~/.../test$ git init user@guest:~/.../test$ git add README.md user@guest:~/.../test$ git commit -m "First commit" user@guest:~/.../test$ git remote add origin https://github.com/james/test.git user@guest:~/.../test$ git push -u origin main
And then:
user@guest:~/.../test$ git commit --amend user@guest:~/.../test$ git log --oneline --graph --all * ca82a6d (HEAD -> main) First commit * 085bb3b (origin/main) First commit user@guest:~/.../test$ git merge origin/main fatal: refusing to merge unrelated histories
What did I do wrong and what is the best solution in this case?