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

标签 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添加 -u Gemfile Gemfile.lock ...所有其他不是子模块的文件...

最佳答案

完成 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 这些。)

关于git - 除了子模块中的新提交之外,我如何 `git add -u`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41642315/

相关文章:

git - 为什么我不能将镜像推送到 github?

git - 是否有应用 .gitattributes 的全局方法?

git - 将两个相似的远程 git repos merge 为一个

linux 使用/应用补丁以及与帅哥相关的困惑

git - 为什么无论我是否运行 git add,当我切换分支(修改、添加、删除文件)时,git 一直显示我的更改?

git - 'git pull' 命令像 'svn update' 一样工作?

git - 如何在 git 中处理 .csproj

git - 即使在 git add 之后,更改也不会提交

GIT 分支 - 我们能在只有 master 的情况下生存吗?

git - 无法使用 Git Bash 提交