How do I append one git history to another?

git, git-submodules, git-subtree

Solution

The general idea is:

- explained in "How to combine two separate unrelated Git repositories into one with single history timeline" (fetch + cherry-picking)

implemented in "Concatenate the history of two Git repositories?"

git clone <git repository B url>
cd <git repository B directory>
git remote add repo-A-branch <git repository A directory>
git fetch repo-A-branch master
git remote rm repo-A-branch

Once you have imported the right branch from A, you can use graft point, and then `git filter-branch` to turn a grafted history into "real" history, to get rid of the graft point.

Problem

I have a repository that contains the code for an old version of a website that is no longer being used on `master`. The site was completely redesigned in a new repository, and the code and history from that repository was copied over into a branch in the repo of the old site, let's call it `new_site`. I can't merge `new_site` into `master`, since the histories are entirely different. I've investigated both submodules and subtree merges a bit, but both seem to only be relevant when you're trying to keep code from one project contained in a subdirectory of another project, not when you want to stick two working trees on top of each other. At this point, I would like to have the old code remain where it is, and just append `new_site` on top of the current HEAD. Any idea how I can accomplish this, or alternate suggestions for cleaning up this mess without blowing away the old code?

Original source

Related problems