Below is a simple reproduction of the issue. The _real_ problem is that this is how our pull request merges work, they're not allowed to do fast-forward merges. To work around this we are having to split this up into two pull requests/merges: One that copies the submodules to the new location and includes any fixes required to support the move, and a second that removes the old locations. ## Setup steps git clone https://github.com/dakotahawkins/submodule-move-merge-bug-main-repo.git cd submodule-move-merge-bug-main-repo ## How it was initially constructed # git submodule add ../submodule-move-merge-bug-submodule-repo.git ./submodule-location-1 # git commit -m "Added submodule in its initial location" # git push # git checkout -b move-submodule # git mv ./submodule-location-1 ./submodule-location-2 # git commit -m "Moved submodule" # git push --set-upstream origin move-submodule git branch move-submodule origin/move-submodule ## Test fast-forward merge, this will work git checkout -b merge-ff-test master # warning: unable to rmdir submodule-location-2: Directory not empty rm -rf ./submodule-location-2 git merge --ff-only move-submodule ## Test no-fast-forward merge, this will fail with conflicts: git checkout -b merge-no-ff-test master git merge --no-ff move-submodule # Auto-merging submodule-location-2 # Adding as submodule-location-2~move-submodule instead # Automatic merge failed; fix conflicts and then commit the result. git status # On branch merge-no-ff-test # You have unmerged paths. # (fix conflicts and run "git commit") # (use "git merge --abort" to abort the merge) # # Changes to be committed: # # modified: .gitmodules # deleted: submodule-location-1 # # Unmerged paths: # (use "git add <file>..." to mark resolution) # # added by us: submodule-location-2 # # fatal: Not a git repository: 'submodule-location-1/.git' # Submodule changes to be committed: # # * submodule-location-1 07fec24...0000000: