除了子模块中的新提交之外,我如何`git add -u`?

时间:2017-01-13 19:43:08

标签: git

我当前的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...

1 个答案:

答案 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这些。)