Concatenate the history of two Git repositories?

2019-06-19 19:03发布

I have an old Git repo, call it app. Then, after a year, I wanted to rebuild the app from scratch, so I made a new repo, call it app-2.

Now, I realize I should've just made a new branch or something, instead of a new repo, because I want to move the history of app-2 on top of app and then get rid of app-2 so that app now has all the history of app + app-2.

Is this possible to do?

UPDATE:

I tried "reseting" the app repo by removing all the files in app (except for the .git directory) and making a commit. Then:

cd ~/Projects/app-2
git format-patch --stdout --root master > ../app/app-2-patches.txt
cd ../app
git am app-2-patches.txt

But, I got conflicts in places where I had branches in app-2.

Is it possible to apply the commits from app-2 while keeping the branch structure of the history of app-2?

2条回答
劳资没心,怎么记你
2楼-- · 2019-06-19 19:34

You can use git's graft points for this. First pull the history of app into app-2 from a remote, then follow the instructions e.g. in this answer.

查看更多
Evening l夕情丶
3楼-- · 2019-06-19 19:35

Step one is get the two apps in one repo; step two is merge them in some sensible way.

For step one I'd say push all of the repository branches in app-2 to branches in the app repository:

$ cd /path/to/app-2
$ git remote add app-repo /path/to/app
$ git push app-repo master:app-2-master     # master in app-2 goes to app-2-master in app repo
# repeat for other branches in app-2

Now over in the app repository you have all its branches and all the app-2 branches. Let's say you (want to) consider app-2 as derived from app. Then you rebase all of app-2 on app with:

$ cd /path/to/app
$ git checkout app-2-master
$ git rebase master

this might involve lots of work to resolve conflicts but git will be doing loads of work for you too.

查看更多
登录 后发表回答