Hi, The command "git submodule update" accepts an "--init" flag to initialize an uninitialized submodules. Shouldn't it also accept "--sync" flag in order to sync and unsync'd submodule? Otherwise it seems like I'll have to do "git submodule update" twice in order to update an already initialized submodule whose upstream repo url has been updated in .gitmodules to point to somewhere new, like so: $ cd superproject $ git pull $ git submodule update --init --recursive fatal: reference is not a tree: c21784553dcd15e1534773fe3177f39cbb93be65 Unable to checkout 'c21784553dcd15e1534773fe3177f39cbb93be65' in submodule path 'path/to/submodule' Failed to recurse into submodule path 'path/to/submodule' $ git submodule sync $ git submodule update --init --recursive If the submodule update subcommand accepts the "--sync" flag then above can then be simplified to this: $ cd superproject $ git pull $ git submodule update --init --sync --recursive So the "--init" and "--sync" flags tells git to initialize an uninitialized submodule, and syncs any out-of-sync submodules. nazri