Git diff/submodule 學(xué)習(xí)記錄

資料:
Git Gud: The Working Tree, Staging Area, and Local Repo

理解: 工作區(qū)、暫存區(qū)、git 倉庫

  • staging area
  • working area
  • repo
工作區(qū)、暫存區(qū)、git 倉庫.png

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. 先克隆父項目,再更新子模塊
    1. 直接遞歸克隆整個項目

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. 直接遞歸克隆整個項目

7.11 Git 工具 - 子模塊

如果給 git clone 命令傳遞 --recurse-submodules 選項,它就會自動初始化并更新倉庫中的每一個子模塊, 包括可能存在的嵌套子模塊。

git clone --recurse-submodules xxx父項目

如果你已經(jīng)克隆了項目但忘記了 --recurse-submodules,那么可以運行 git submodule update --initgit submodule initgit submodule update合并成一步。如果還要初始化、抓取并檢出任何嵌套的子模塊, 請使用簡明的 git submodule update --init --recursive。

刪除子模塊

刪除子模塊比較麻煩,需要手動刪除相關(guān)的文件,否則在添加子模塊時有可能出現(xiàn)錯誤。
刪除子模塊的步驟:

  1. 刪除 submodule 文件夾
$ git rm --cached submodule_file_name
$ rm -rf  submodule_file_name
  1. 刪除 .gitmodules 文件中相關(guān)的 submodule信息
  2. 刪除 .git/config中相關(guān)的 submodule 信息
  3. 刪除 .git 文件夾中相關(guān)的 submodule 信息
$ rm -rf .git/modules/xxx

其他文章學(xué)習(xí)

https://www.cnblogs.com/lsgxeva/p/8540758.html

后續(xù)更新

  1. 之前對 submodule 的理解是“以為submodule就是默認master上的 commit id”, 后來和同事聊分支部署問題,才意識到了 submodule 只是針對 commit id, 不是對應(yīng)分支的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容