Git 版本化管理(从功能开发、发布到 bug 修复)
本文最后更新于:2023年4月25日 晚上
描述
Git 的使用已经越来越广泛了,Git 的好处这边也就不多说了,主要还是说一下使用向的东西,项目开发过程中也会遇到各种各样的问题,这边就把我遇到问题及解决的方式分享下
经典 Git 分支图
下面就这张图给大家说下 Git 中开发->发布->Bug 修复 的流程。
常规开发流程
我习惯使用 oh-my-zsh 去使用 Git,主要是因为他的 git alias 可以连 git 关键字都缩写成 g。
- 首先你需要有一个开发分支(dev、develop、develop.v1),需要开发新功能的时候,从开发分支切一个新分支出来进行开发:
1
2
3
4
5# 常规 bash
git checkout -b [branch]
# oh-my-zsh
gcb [branch] - 部分模块完成,将当前目录的所有文件添加到暂存区,准备提交
1
2
3
4
5# 常规 bash
git add .
# oh-my-zsh
ga . - 功能开发完成,提交到本地仓库(commit message 的格式可以参考阮一峰的网络日志)
如果是多人开发并且有代码 Review 的话,尽量养成模块开发,分步提交的好习惯,用以避免让代码 Review 的人一次看几千行代码。
- 提交到远程仓库
1
2
3
4
5# 常规 bash
git push [remote] [branch]
# oh-my-zsh
ggp - 提交到远程仓库
1
2
3
4
5# 常规 bash
git push [remote] [branch]
# zsh
ggp - 分支合并
1
2
3
4
5
6
7# 常规 bash
git checkout dev
git merge [function branch]
# oh-my-zsh
gco dev
gm [function branch] - 解决冲突(多人开发难以避免)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 1.拉dev 分支最新的代码
# 常规 bash
git checkout dev && git pull
# oh-my-zsh
gco dev && gl
# 2.切回自己的分支
# 常规 bash
git checkout [function branch]
# oh-my-zsh
gco [function branch]
# 3.本地合并
# 常规 bash
git merge dev
# oh-my-zsh
gm dev
# 4.解决冲突,选择最优解代码,两边代码都有问题的话就手动改正,提交。
发布流程
- 从 dev 分支切出一个新的 release 分支
1
2
3
4
5# 常规 bash
$ git checkout -b [release-X.X.X]
# oh-my-zsh
$ gcb [release-X.X.X] - 将 release-X.X.X 合并到 master 分支
1
2
3
4
5
6
7# 常规 bash
git checkout master
git merge [release branch]
# oh-my-zsh
gco master
gm [release branch] - 打 tag 进行版本更新, Makefile 示例(个人使用 standard-version)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21.PHONY: server build version
registry=example.registry.com
version=`git describe --tags`
server:
@hexo clean \
&& hexo g \
&& hexo s
version:
@echo "build new version..." \
&& standard-version \
&& git push --follow-tags origin master
deployment: version
@echo "build docker image for origin ..." \
&& hexo clean \
&& hexo g \
&& docker build -t $(registry)/allens-blog/blog:$(version) . \
&& sudo docker push $(registry)/allens-blog/blog:$(version)
Bug 修复流程
- 先从发布版本的 release 分支切一个 fix 分支进行 bug 修复
1
2
3
4
5# 常规 bash
git checkout release-X.X.X && git pull && git checkout -b fix_release_somebug
# oh-my-zsh
gco release-X.X.X && gl && gcb fix_release_somebug - 添加代码到暂存区(同上)
- 提交到本地仓库(同上)
- 提交到远程仓库(同上)
- 代码合并到 release-X.X.X
- 测试 OK,将合并 cherry-pick 到 master
- 别忘记将合并 cherry-pick 到 dev,不然下次从 dev 切 release 的时候 Bug 又出现了
- 重新走一遍发布流程
Git 版本化管理(从功能开发、发布到 bug 修复)
https://agopher.com/2020/09/13/tech/2020_git/