How do I change a file's path in git's history?
Here is what I have – a git repo of my code:
projects |-proj1 (no git repo here yet) |-subproj1 <- current git repo here
Here is what I want – a git repo which is now tracking a new project that uses my code:
projects |-proj1 <-git repo moved to here, but still tracking files in subproj1 |-subproj1 (no git repo here)
2 Solutions collect form web for “How do I change a file's path in git's history?”
Rewriting history can be done with the
git filter-branch command. In fact, moving a directory tree into a subdirectory is one of the cut&paste-ready examples given in the
git filter-branch manpage:
git filter-branch --index-filter ' git ls-files -s | sed "s-\t\"*-&subproj1/-" | GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE ' HEAD
Just create the directory structure you want inside the repo – i.e. move all files and folders to “subproj1” folder.
Then stage all added and deleted files and git will work out that they are in fact renames:
git add . git add -u . git commit -m "Moved to a subfolder"