Skip to content

Instantly share code, notes, and snippets.

Last active September 29, 2023 23:53
Star You must be signed in to star a gist
What would you like to do?
How to move a folder from one repo to another and keep its commit history
# source:
# First of all you need to have a clean clone of the source repository so we didn't screw the things up.
git clone git://
# After that you need to do some preparations on the source repository, nuking all the entries except the folder you need to move. Use the following command
git filter-branch --subdirectory-filter your_dir -- -- all
# This will nuke all the other entries and their history, creating a clean git repository that contains only data and history from the directory you need. If you need to move several folders, you have to collect them in a single directory using the git mv command.
# You also might need to move all your content into some directory so it didn't conflict with the new repository when you merge it. Use commands like that
mkdir new_directory/
git mv my_stuff new_directory/
# Once you've done commit your changes, but don't push!
git commit -m "Collected the data I need to move"
# This is all about the source repository preparations.
# Now go to your destination repository
cd ../my-repo2/
# And here is the trick. You need to connect your source repository as a remote using a local reference.
git remote add repo1 ../my-repo1/
# After that simply fetch the remote source, create a branch and merge it with the destination repository in usual way
git fetch repo1
git branch repo1 remotes/repo1/master
git merge repo1 --allow-unrelated-histories
# This is pretty much it, all your code and history were moved from one repository to another. All you need is to clean up a bit and push the changes to the server
git remote rm repo1
git branch -d repo1
git push origin master
# That's all. After that you can nuke the temporary source repository.
Copy link

moshfeu commented Jun 9, 2022

Thank you!

Copy link

Works perfectly! Thanks.

Copy link


Iam following the same, but in the push getting following error.Kindly help

Total 4203 (delta 1720), reused 4202 (delta 1720), pack-reused 0
remote: Resolving deltas: 100% (1720/1720), done.
remote: Rejected by YACC
remote: (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
remote: / .. \ / .. \ / .. \ / .. \ / ..
remote: ( Y )/ ( Y )/ ( Y )/ ( Y )/ ( Y )/
remote: (
remote: || E || || R || || R || || O || || R ||
remote: .' -' '._ _.' -' '. .' -' '._ _.' -' '. _.' -' '. remote: (.-./-'.-.)(.-./-.-.)(.-./-.-.)(.-./-'\.-.)(.-./-\.-.) remote: -' -' -' -' -' -' -' -' -' `-'
remote: Push rejected.
remote: refs/heads/master: 1f77a4445ec: expected committer email '' but found ''
remote: refs/heads/master: be3b4b47d9a: expected committer email '' but found ''

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment