这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、Git的基本使用方式
- Ref
- refs的内容就是对应的Commit ID。因此把ref当做指针,指向对应的Commit来表示当前Ref对应的版本。
- 不同种类的ref: refs/heads前缀表示的是分支。除此之外还有其他种类的ref,比如refs/tags前缀表示的是标签。
- Branch
- git checkout-b可以创建一个新分支。分支一般用于开发阶段,是可以不断添加Commit进行迭代的。
- Tag
- 标签一般表示的是一个稳定版本,指向的Commit一般不会变更。(可以通过git tag命令生成tag)
- Annotation Tag(附注标签)
- 是一种特殊的Tag,可以给Tag提供一些额外的信息。
- 通过git tag-a命令来完成附注标签的创建
- 追溯历史版本
- 获取当前版本代码:通过Ref指向的Commit可以获取唯一的代码版本
- 获取历史版本代码:Commit里面会存有parent commit字段,通过commit的串联获取历史版本代码。
- 修改历史版本
- commit amend: 通过这个命令可以修改最近的一次commit信息,修改之后commit id会变
- rebase: 通过git rebase-i HEAD~3可以实现对最近三个commit的修改:
- 合并commit
- 修改具体的commit message
- 删除某个commit
- filter branch: 该命令可以指定删除所有提交中的某个文件或者全局修改邮箱地址等操作
- Objects
- 新增的Object: 修改Commit后我们可以发现git object又出现了变化,其中的变化就是新增了commit object7f,但是之前的commit object63并没有被删除
- 悬空的Object: 顾名思义就是没有ref指向的object
- Git GC
- GC: 通过git gc命令,可以删除一些不需要的object,还可以对object进行一些打包压缩来减少仓库的体积。
- Reflog:reflog是用于记录操作日志,防止误操作后数据丢失。通过reflog来找到丢失的数据,手动将日志设置为过期。
- 指定时间: git gc prune=now指定的是修剪多久之前的对象(默认是两周前)