这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
Git
- 代码托管
- 代码智能
- 代码分析
- 持续集成
- Cloud IDE
目标
- 基本命令
- 研发规范
版本控制演进
-
新建文件夹
-
本地版本控制
- 增量保存
-
集中式版本控制
- 远程服务来保存
- 本地无版本,不保存所有版本代码
-
分布式版本控制
-
每个库保存完整提交历史
-
记录是完整文件快照而不是增量
- 故大文件支持不好
-
基本命令
初始化
git init
查看
git status
git log
.git结构
.git
├── branches
├── config
├── description
├── HEAD //当前的branch
├── hooks
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
配置
-
作用域
-
system
/etc/gitconfig
-
global
~/.gitconfig
-
local
- 当前
.git/config
- 当前
-
-
常用配置
-
用户名
[user] -
别名
[alias] -
remote
[remote]- http remote
- ssh remote
-
追踪
git add
查看文件
git cat-file -p
修改历史版本
- commit --amend
- rebase
- filter --branch
git gc
gcreflog- 指定时间
git reflog expire --expire=now --all
git gc --prune=now
数据类型
object
- commit
- tree
- blob
- tag
commit -> tree -> blob
commit间用parent commit关联
refs(指针)
-
branch
git checkout -b [brach-name]
-
tag
git tag [tag-name]
规范
工作流
集中式工作流
- 仅基于master分支开发
分支关联工作流
-
gitflow
- 支持多种类型分支
-
github flow
-
只有一个主干分支,基于pr向主干分支提交
-
方式
- 同仓库 pr
- 自己fork
-
保护分支:不能直接push,需要branch + pr
-
-
gitlab flow
- 基于github flow优化
都使用merget合并代码
代码合并
-
fast-forward
- 无merge节点,合并后保持线性历史
- 需要rebase
-
tree-way merge
- 默认,产生merge节点
如何选择
github flow
- 少量多次
- pr后至少有code review再合入
- 主干分支尽量保持整洁,使用fast-forward,合入前rebase