资料:
Git Gud: The Working Tree, Staging Area, and Local Repo
理解: 工作区、暂存区、git 仓库
- staging area
- working area
- repo
Git 命令记录
git diff 命令
https://www.jianshu.com/p/80542dc3164e
工作区 和 暂存区 对比
git diff <filename>
查看工作区和暂存区的差别。
如果还没有add 到 暂存区,则查看文件自身修改前后的差别。
git diff <branch> <filename>
指定分支,查看和该分支的区别。?
暂存区 和 git repo 对比
git diff --cached <filename>
查看已经 add 到暂存区但是还没有 commit 的内容 和 最新一次 commit 时的内容差异。
git diff --cached <commit> <filename>
指定仓库版本。?
工作区 和 Git repo 对比
git diff <commit> <filename>
查看工作区和git repo 指定commit 的内容差异。
<commit> = HEAD
时,查看工作区 和 最近一次 commit 的内容的差异。
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
更新项目内 submodule
更新项目内 submodule到最新版本
git submodule update
更新项目内 submodule 为远程项目的最新版本
git submodule update --remote
关于带有 submodule 项目的操作记录
接下来我们将会克隆一个含有子模块的项目。
克隆带有子模块的项目
有两种方式:
- 先克隆父项目,再更新子模块
- 直接递归克隆整个项目
1. 先克隆父项目,再更新子模块
// 当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:
$git clone xxxx父项目
// 查看 submodule
// 如果submodule 前面有个 `-` 号,说明子模块文件还未检入(空文件夹)
$ git submodule
//你必须运行两个命令:git submodule init 用来初始化本地配置文件,
//而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
//( init 每个项目只用在克隆父项目之后运行一次)
$git submodule init
// 更新 submodule
$git submodule update
2. 直接递归克隆整个项目
如果给 git clone 命令传递 --recurse-submodules 选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。
git clone --recurse-submodules xxx父项目
如果你已经克隆了项目但忘记了 --recurse-submodules
,那么可以运行 git submodule update --init
将 git submodule init
和 git submodule update
合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update --init --recursive
。
删除子模块
删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误。
删除子模块的步骤:
- 删除 submodule 文件夹
$ git rm --cached submodule_file_name
$ rm -rf submodule_file_name
- 删除 .gitmodules 文件中相关的 submodule信息
- 删除 .git/config中相关的 submodule 信息
- 删除 .git 文件夹中相关的 submodule 信息
$ rm -rf .git/modules/xxx
其他文章学习
https://www.cnblogs.com/lsgxeva/p/8540758.html
后续更新
- 之前对 submodule 的理解是“以为submodule就是默认master上的 commit id”, 后来和同事聊分支部署问题,才意识到了 submodule 只是针对 commit id, 不是对应分支的。
网友评论