前言
git从大一开始用也算有三年时间了,却始终只是熟悉一些常用的操作,对于rebase、review等都不是很熟悉,期间曾接触过一个党政项目使用的是SVN不忍吐槽,,太难用了速度堪比蜗牛而且总感觉操作有点迷。
分支
git最强大的功能之一便是分支了,通过指针对分支进行各种操作,他可以让我们多人同时进行开发如同平行宇宙互不相干涉。而且切换分支速度极快无论是多大的项目都能在及短的时间内切换完成
- master: 主分支,任何项目都必须有个这个分支,对项目进行tag或发布版本等操作,都必须在该分支上进行。
- develop: 开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支,同时release分支由此分支检出。
- release: 发布分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。
- feature: 功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。
- fix分支 补丁分支,由develop分支检出,用作bug修复,bug修复完成需merge回develop分支,并将其删除。所以该分支属于临时性分支。
- hotfix分支 热补丁分支,和fix分支的区别在于,该分支由master分支检出进行线上版本的bug修复,修复完成后merge回master分支,并merge到develop分支上,merge完成后也可以将其删除,也属于临时性分支。
常用命令
> # 从远程库中克隆,克隆一个版本库到新的目录,可以在当前目录新建一个文件夹,也可以git clone [地址] [本地目录]
> git clone 地址
> # 将工作区中的文件提交到暂存区,可以指定某个后缀或者匹配及全提交
> git add 文件名 或 .
> # 将暂存区内容添加到本地仓库中,也可以使用-a来代替上一个操作,提交内容错误可以--amend来追加或者修改信息
> git commit -m "提交信息"
> # 将本地仓库提交到远程仓库中
> git push <远程主机名> <本地分支名>:<远程分支名>
> # 比较文件修改了什么内容,不太常用一般我都用vscode gitlens代替了
> git diff <文件名>
> # 过滤或者显示全部历史提交日志,偶尔用于复制head配合reset --hard回滚版本
> git log
> # 创建并切换到该 分支上, git checkout -b <分支名> 也可以但git不推荐, 容易造成混淆
> git switch -c <分支名>
> # 合并分支到当前分支上, 如果出现冲突一般是在工具或者IDE内解决后重新提交
> git merge <分支名>
多人协作开发
如果是个人或是小团队可能不会遇到下列情况:
- 没有合并多次提交记录
- 导致git提交历史很乱很多无用或是临近相同的commit
- 在出现问题情况下版本回滚也会造成一定的困难, 海量的commit要一条条来
- review时也会造成困难假设一个小功能提交了50多次, review时该有何感想...
可以通过
git rebase -i <分支名>修改为s或者git rebase -i HEAD~4合并最近的 4 次提交纪录
- 在功能分支工作流中使用Pull Request
- 在功能分支开发完成后可以Pull Request指定review维护者,维护者review后如果没问题会合并到master上,如果有问题会在Pull Request中反馈。