資料:
Git Gud: The Working Tree, Staging Area, and Local Repo
理解: 工作區(qū)、暫存區(qū)、git 倉庫
- staging area
- working area
- repo

Git 命令記錄
git diff 命令
http://www.itdecent.cn/p/80542dc3164e
工作區(qū) 和 暫存區(qū) 對比
git diff <filename>
查看工作區(qū)和暫存區(qū)的差別。
如果還沒有add 到 暫存區(qū),則查看文件自身修改前后的差別。
git diff <branch> <filename> 指定分支,查看和該分支的區(qū)別。?
暫存區(qū) 和 git repo 對比
git diff --cached <filename>
查看已經(jīng) add 到暫存區(qū)但是還沒有 commit 的內(nèi)容 和 最新一次 commit 時的內(nèi)容差異。
git diff --cached <commit> <filename> 指定倉庫版本。?
工作區(qū) 和 Git repo 對比
git diff <commit> <filename>
查看工作區(qū)和git repo 指定commit 的內(nèi)容差異。
<commit> = HEAD 時,查看工作區(qū) 和 最近一次 commit 的內(nèi)容的差異。
git repo 和 git repo 對比
git diff <commit> <commit>
Git repo 中任意兩次 commit 之間的差別。
git submodule 命令
在項目里添加子模塊
git submodule add <repo url> <submodule的別名>
如果沒有給 <submodule的別名>, 默認的是repo根目錄file名字
查看項目中的submodule
git submodule
更新項目內(nèi) submodule
更新項目內(nèi) submodule到最新版本
git submodule update
更新項目內(nèi) submodule 為遠程項目的最新版本
git submodule update --remote
關(guān)于帶有 submodule 項目的操作記錄
接下來我們將會克隆一個含有子模塊的項目。
克隆帶有子模塊的項目
有兩種方式:
- 先克隆父項目,再更新子模塊
- 直接遞歸克隆整個項目
1. 先克隆父項目,再更新子模塊
// 當你在克隆這樣的項目時,默認會包含該子模塊目錄,但其中還沒有任何文件:
$git clone xxxx父項目
// 查看 submodule
// 如果submodule 前面有個 `-` 號,說明子模塊文件還未檢入(空文件夾)
$ git submodule
//你必須運行兩個命令:git submodule init 用來初始化本地配置文件,
//而 git submodule update 則從該項目中抓取所有數(shù)據(jù)并檢出父項目中列出的合適的提交。
//( init 每個項目只用在克隆父項目之后運行一次)
$git submodule init
// 更新 submodule
$git submodule update
2. 直接遞歸克隆整個項目
如果給 git clone 命令傳遞 --recurse-submodules 選項,它就會自動初始化并更新倉庫中的每一個子模塊, 包括可能存在的嵌套子模塊。
git clone --recurse-submodules xxx父項目
如果你已經(jīng)克隆了項目但忘記了 --recurse-submodules,那么可以運行 git submodule update --init將 git submodule init和 git submodule update合并成一步。如果還要初始化、抓取并檢出任何嵌套的子模塊, 請使用簡明的 git submodule update --init --recursive。
刪除子模塊
刪除子模塊比較麻煩,需要手動刪除相關(guān)的文件,否則在添加子模塊時有可能出現(xiàn)錯誤。
刪除子模塊的步驟:
- 刪除 submodule 文件夾
$ git rm --cached submodule_file_name
$ rm -rf submodule_file_name
- 刪除 .gitmodules 文件中相關(guān)的 submodule信息
- 刪除 .git/config中相關(guān)的 submodule 信息
- 刪除 .git 文件夾中相關(guān)的 submodule 信息
$ rm -rf .git/modules/xxx
其他文章學(xué)習(xí)
https://www.cnblogs.com/lsgxeva/p/8540758.html
后續(xù)更新
- 之前對 submodule 的理解是“以為submodule就是默認master上的 commit id”, 后來和同事聊分支部署問題,才意識到了 submodule 只是針對 commit id, 不是對應(yīng)分支的。