以前發佈了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