Git diff/submodule 学习记录

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

理解: 工作区、暂存区、git 仓库

  • staging area
  • working area
  • repo
工作区、暂存区、git 仓库.png

Git 命令记录

git diff 命令

https://www.jianshu.com/p/80542dc3164e

工作区 和 暂存区 对比

git diff
查看工作区和暂存区的差别。
如果还没有add 到 暂存区,则查看文件自身修改前后的差别。

git diff 指定分支,查看和该分支的区别。?

暂存区 和 git repo 对比

git diff --cached
查看已经 add 到暂存区但是还没有 commit 的内容 和 最新一次 commit 时的内容差异。

git diff --cached 指定仓库版本。?

工作区 和 Git repo 对比

git diff
查看工作区和git repo 指定commit 的内容差异。
= HEAD 时,查看工作区 和 最近一次 commit 的内容的差异。

git repo 和 git repo 对比

git diff
Git repo 中任意两次 commit 之间的差别。

git submodule 命令

在项目里添加子模块

git submodule add
如果没有给 , 默认的是repo根目录file名字

查看项目中的submodule

git submodule

更新项目内 submodule

更新项目内 submodule到最新版本
git submodule update

更新项目内 submodule 为远程项目的最新版本
git submodule update --remote


关于带有 submodule 项目的操作记录

接下来我们将会克隆一个含有子模块的项目。

克隆带有子模块的项目

有两种方式:

    1. 先克隆父项目,再更新子模块
    1. 直接递归克隆整个项目

1. 先克隆父项目,再更新子模块

// 当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:
$git clone xxxx父项目

// 查看 submodule
// 如果submodule 前面有个 `-` 号,说明子模块文件还未检入(空文件夹)
$ git submodule

//你必须运行两个命令:git submodule init 用来初始化本地配置文件,
//而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
//( init 每个项目只用在克隆父项目之后运行一次)
$git submodule init 

// 更新 submodule
$git submodule update

2. 直接递归克隆整个项目

7.11 Git 工具 - 子模块

如果给 git clone 命令传递 --recurse-submodules 选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。

git clone --recurse-submodules xxx父项目

如果你已经克隆了项目但忘记了 --recurse-submodules,那么可以运行 git submodule update --initgit submodule initgit submodule update合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update --init --recursive

删除子模块

删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误。
删除子模块的步骤:

  1. 删除 submodule 文件夹
$ git rm --cached submodule_file_name
$ rm -rf  submodule_file_name
  1. 删除 .gitmodules 文件中相关的 submodule信息
  2. 删除 .git/config中相关的 submodule 信息
  3. 删除 .git 文件夹中相关的 submodule 信息
$ rm -rf .git/modules/xxx

其他文章学习

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

后续更新

  1. 之前对 submodule 的理解是“以为submodule就是默认master上的 commit id”, 后来和同事聊分支部署问题,才意识到了 submodule 只是针对 commit id, 不是对应分支的。

你可能感兴趣的:(Git diff/submodule 学习记录)