【问题标题】:How do I `git add -u` except new commits in submodules?除了子模块中的新提交,我如何`git add -u`?
【发布时间】:2017-01-13 19:43:08
【问题描述】:

我现在的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...

【问题讨论】:

    标签: git


    【解决方案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
    

    最终解决方案,一个 bashrc/zshrc 函数,它执行 git add -u 并重置子模块:

    gitaddus() {
      git add -u
      git config -f .gitmodules --get-regexp path | awk '{ print $2 }' | xargs git reset -- >/dev/null
      git status
    }
    

    (仍有改进的空间,例如检查哪些子模块已添加到索引中,因此我们不会git reset 这些。)

    【讨论】:

    • @Nowaker 好的,我搞混了。我已经编辑了我的答案。
    • 感谢@VonC。我已经把它变成了一个函数并添加了git add -u
    • @Nowaker 太棒了!您可以将其添加为函数,或者您可以创建一个名为 git-addus(无文件扩展名)的 bash 脚本(即使在 Windows 上),然后您可以将其调用为 git addus。如果git-addus 在您的$PATH%PATH% 中,则当以git addus 调用时,它将被Git 作为bash 执行。这适用于任何名为 git-xxx 的脚本。
    猜你喜欢
    • 2017-04-11
    • 2013-01-03
    • 2012-06-06
    • 2022-08-14
    • 2014-08-01
    • 2012-12-12
    • 2021-05-06
    • 2020-08-09
    • 2016-02-01
    相关资源
    最近更新 更多