Reputation: 4592
We have a project that was forked a while back mostly via a copy/paste method. But there is still significant overlap between the repos.
Is it possible to retroactively mark this fork as a fork to github, so that functions like compare and pull requests will do the right thing?
Note: I have tried the "hack" below, of forking anew, cloning the fork, copying the "forked" content over, then git add/commit/push. However, the file histories in the original "fork" are lost, and branches don't come over.
Upvotes: 40
Views: 10400
Reputation: 134
As far as I know, there's no way to do this retroactively; however, it is possible by pushing to a new fork.
git checkout deviant-branch
git remote add Fork https://github.com/path-to-new-repo.git
git push --force --set-upstream Fork/main-branch deviant-branch
Force-pushing is the only way to get a literal, unchanged copy of your current branch as the "main" repo in the fork. The other answers telling you to PR or rebase will not accomplish what you want.
All other branches should come over as a part of the new fork. Delete the ones you don't need.
Upvotes: 1
Reputation: 5606
you should try something along the lines for this:
git add remote ...
)git rebase
)Upvotes: 4
Reputation: 2126
As you don't want to "squash" your commits into a single file what you could do is:
Or you could take a look at how to merge two repositories like in this post. Like they did there you could add your "c&p repo" to the fork as a subtree, like it is explained in detail over here.
This are the steps taken in the guide:
git remote add -f c&prepo /path/to/c&prepo
git merge -s ours --no-commit c&prepo/master
git read-tree --prefix=vendor/c&prepo/ -u c&prepo/master
git commit
However even with those methods you aren't able to merge the whole repositories but only specific branches. What you could do is i.e. create a pull request (described in my first method) for each branch, which could take up some time depending on your branching model.
I don't think there actually is a solution where you can merge two different repositories while keeping their commit history and branches at the same time. Best of luck to you.
Upvotes: 6