each submodule is represented as a pointer to a commit. updating the submodule just updates the pointer. so you should always be able to pull in changes to submodules locally and not think too much about it (assume that the person who made the new change will deal with it, or it will happen as part of deploy processes). the key is to not add the submodule pointers during your commit. 

i like to use git gui for interacting with submodules, since it gives a nicer UI indicating the commits that diverge from what's there, but i think i'm the only one on the team that does this.