以前发布了git submodule使用指南(一),今天这个第二篇,会写一些修改方面的操做和个人理解。git
我我的认为,子模块在使用的过程才是最值得注意的地方,因此也没有跟上面的内容一块儿做为“增删改查”系列写下去。 “改” 我认为是最重要的一环。其中又能够分为:bash
上面提到更新子模块的操做服务器
git submodule update --remote
复制代码
可是此时的子模块是出于一个特殊的状态,虽然上游的变化被更新到了本地,可是本地子模块会处于一个游离的HEAD状态。spa
在HEAD状态下,若是将本地修改的内容进行commit,是不会“附着”到任何分支上的。游离的内容,会在切换分支以后消失。code
那怎么操做才是正确的呢?递归
git submodule update —remote —merge
,将上游的变化合并到本地的这个分支上。若是你忘记—rebase或—merge,Git 会将子模块更新为服务器上的状态。而且会将项目重置为一个游离的 HEAD 状态。要弥补这个错误的话,从新执行1和3就能够了。git push
时添加--recure-submodule
参数,此参数表示递归子模块,能够设置为2个值“check”和“on-demand”。check会使没推送子模块的父仓库自己推送失败。而on-demand会尝试自动推送子模块后再推送父仓库,若是子模块因为其余缘由失败,那么父仓库也会推送失败。根据Gitbook的描述,这是当同一分支在本地和上游出现了不一样分叉,须要进行合并的时候,而且两者不是祖先和后代的关系(或者说不是一条分子上的提交)。开发
操做方法以下:rem
子模块的使用上面说得可能仍是有点比较绕,我我的认为比较合适咱们团队的子模块工做流应该比较简单。get