git tracks submodules like regular objects. this means that after you add a submodule, the exact state (for example, revision) of the submodule is also stored in the parent module.
So:
cd submodule
git checkout v2.3.2
cd -
git commit . -m "use submodule v2.3.2"
as a side effect of the githandles submodules, is that you cannot have a “live” submodule (where you always keep track of the HEAD of the master branch) - the submodule is really always off.
¹ ; master/HEAD pull ing ; .