我当前的git status
是:
modified: Gemfile
modified: Gemfile.lock
modified: ... many more files
modified: submodule_1 (new commits)
modified: submodule_2 (new commits)
modified: ... many more updated submodules ...
git add -u
?我想要实现的是git add -u
,然后是git reset HEAD submodule_1 submodule_2 ... submodule_n
,或等同于git add -u Gemfile Gemfile.lock ...all other files that are not submodules...
答案 0 :(得分:1)
完成git add -u后,您需要重置所有子模块路径 如“List submodules in a git repository”
中所述git config --file .gitmodules --get-regexp path | awk '{ print $2 }' | xargs git reset --
这将列出所有子模块路径,并在每个子模块路径上执行git reset
。
类似的想法,from this gist:
for i in `git config -f .gitmodules --get-regexp path | cut -d" " -f2` ; do git reset -- $i ; done
最终解决方案,一个执行git add -u
并重置子模块的bashrc / zshrc函数:
gitaddus() {
git add -u
git config -f .gitmodules --get-regexp path | awk '{ print $2 }' | xargs git reset -- >/dev/null
git status
}
(还有改进的余地,例如检查哪些子模块已添加到索引中,因此我们不会git reset
这些。)