Cannot checkout master branch from branch with submodule
I have a directory in my repo (call it
blah) which contains some files that I manualy copied from another repo (
repo-blah). One day, I decide to get smart and make this
blah directory a submodule, so that I don’t have to manually recopy the files any time they change in
repo-blah, and so that I can make changes to those files in my repo and have a gitish way of updating
I’d been working on the master branch, so I make another branch called
sub-blah-branch where I remove the blah directory from the index:
$ git rm -r blah
and then create a submodule for it:
$ git submodule add uri/to/repo-blah blah
I commit everything, and make sure the repo is clean:
$ git status # On branch sub-blah-branch nothing to commit (working directory clean)
Then, whilst feeling pretty cool about all this submodule stuff, I try to checkout the master branch. But I get this:
$ git checkout master error: The following untracked working tree files would be overwritten by checkout: blah/[every file that I had manually copied from repo-blah] Please move or remove them before you can switch branches. Aborting
Pro Git’s chapter on submodules tells me that when switching from branches that have created submodules, the contents of those submodules aren’t automatically removed, and instead become untracked once the repo switches branches. In this situation, I can’t switch to
master without doing
rm -rf on the
blah directory first.
Is there a better way to deal with this problem?
I’m using git version 22.214.171.124
One Solution collect form web for “Cannot checkout master branch from branch with submodule”
That seems expected, considering that those files are:
- tracked in
- tracked differently, as a submodule (gitlink entry in the index) in
So when you switch back in
master, git tries to remove the submodule entry (
blah/ folder) from the index, which it can’t since you have untracked files.
You have various way to proceed (in “
error: The following untracked working tree files would be overwritten by checkout – git”)
But I would recommend either:
- managing two clones, each one on a different branch.
- or making sure you don’t have any
- or making your
blahsubmodule directly in
masterinstead of in another branch
Make sure, by the way, to properly initialize your submodule once you have declared it:
git submodule update --init
And don’t forget you can make that submodule follow a branch of the upstream repo if you want:
see “Git submodules: Specify a branch/tag”.