When I create a shallow submodule, the submodule doesn't stay shallow after the submodule's remote changes if the submodule is re-fetched as a result of fresh clone, or a result of manually deleting the submodule's .git folder. Detailed reproduction instructions here: https://gist.github.com/jpear1/0ffc28e8167d00504fba54d50ec4848d Maybe related is another problem I've noticed with git submodules: I'm unable to discard commits by moving the tracked commit backwards (with git reset) in a shallow submodule (the .git/modules/<mod-name>/shallow file doesn't update properly). Basically it seems like the submodule is using the latest shallow "root" it can find in the branch's history of gitlinks and not allowing me to use anything but that. I'm not sure if this is really what's going on though. I go into more detail in an SO post here: https://stackoverflow.com/questions/63976876