Git相關命令及用法

add commit push

git add *
git commit -m ""
git push -u origin branch

在刪除某一些文件時, 應使用git add .. 不然, 會出現Changes not staged for commit: ...git

添加子模塊

子模塊的操做必須很是當心, 由於其中有不少坑.github

第一次添加子模塊

git submodule add git://github.com/chneukirchen/rack.git rack

刪除某個子模塊

git rm --cached pathOfSubmodulemarkdown

而後刪除_config.yml以及.git/config文件中相關記錄spa

更改子模塊後提交對子模塊的修改

進入子模塊所在目錄code

git add *
git commit -m ""
git push

主項目提交

咱們能夠直接像正常git文件同樣的流程進行提交, 可是若是咱們忘記提交子模塊的變更, 而新的項目和子模塊的變更又相關. 那麼其餘人從遠程倉庫中clone的文件可能並不能正確運行(缺乏必要的子模塊變更).rem

全部推薦使用如下兩種方法:
1. git push --recurse-submodules=check. 如有子模塊的變更沒有推送, 那麼該push會失敗.
2. git push --recurse-submodules=on-demand. 如有子模塊的變更沒有推送, 那麼它會先推送子模塊的變更, 而後再推送主項目.string

子模塊的更新

其餘人若是對子模塊進行了修改, 在git pull以後, 再調用如下git submodule update更新子模塊.it

調用git submodule update也更新子模塊的相關內容, 可是會將子模塊留在一個稱做 detached HEAD的狀態. 這意味着沒有本地工做分支(例如 「master」)跟蹤改動。 因此你作的任何改動都不會被跟蹤。即便你使用了commit提交了一些變更, 在你下一次使用git submodule update時, 這些變更會所有丟失.asm

因此須要進入每個你但願對其進行修改的子模塊,git checkout branchName檢出一個分支. 從遠程倉庫中更新本地文件時, 使用git submodule update --remote --merge, 也可使用--rebase.ast

若是忘記了--rebase或者--merge, git會將子模塊更新爲遠程倉庫上的狀態, 並且該項目將再一次進入 detached HEAD 的狀態. 解決方法:

  1. 檢出包含以前本地更改的分支
  2. 而後手動的merge或者rebase任何一個遠程分支便可.

即便沒有提交子模塊的更改也某有問題, 此時git只會抓取更改, 而不會覆蓋本地內容.

克隆一個帶子模塊的項目

克隆一個包含子模塊的項目.git clone下來以後, 該子模塊並不會被clone下來.須要調用如下兩個命令:
1. git submodule init來下載本地所需的子模塊配置文件文件
2. git submodule update來下載主項目中列出的合適的子模塊提交

也可使用git clone --recursivegit clone --recursive https://github.com/...自動地初始化並更新倉庫中的每個子模塊.

相關文章
相關標籤/搜索