多人协作 git 工作流规范
本文用于团队多人开发,多环境部署协作工作流,用于管理项目版本正常迭代上线
基本分支管理
「 master」「 dev 」「 feature 」
master 和 dev 分支是长期存在的分支,需要开发人员定期维护。
master 分支主要用于对外发布稳定的新版本,develop 分支表示最新开发的代码分支,这两个分支都不允许开发者直接在该分支上进行代码提交和修改,只允许其他分支进行合入。
master正式发布版本历史dev功能集成分支feature功能分支
工作流
规定一般开发工作流过程
日常功能开发
当明确开发功能点后,开发人员需要从 **「 功能集成分支- dev 」**checkout 出自己的 feauture 分支:fearue/function-name 、f-function-name, 分支名不限,但是需要 见文知义,清晰简洁。
开发完成后,本地 commit -m 'message',推送代码并合入 dev 分支(git merge --no-off | git merge --squash),并部署至测试环境,进行功能测试。测试完成确认上线后,合入 master 分支。
Bug 修复
Bug 修复分为两种 bug:
- 版本正常迭代中的 bug - bugfix
- 线上环境的 bug - hot fix
线上出现 bug 后,开发人员应从 master 分支 checkout 出一个 bug 修复分支:f-bug 进行功能修复,修复完成后,合入 dev && master 分支。
本文中建议区分两种 bug 使用 commit message 用于区分其区别,例如:
迭代过程中,项目升级或者日常测试发现的 bug:[ BUGFIX ]
commit 7f1116f695453ee0a79ea4660a7c30125dad9cfa
Author: xxxxxx <xxxxx.com>
Date: Wed Jul 27 11:20:47 2022 +0000
[BUGFIX] 版本迭代功能 bug 解决
线上环境问题 bug,建议用:[HOTFIX] 表示
commit 7f1116f695453ee0a79ea4660a7c30125dad9cfa
Author: xx <xxxx@xxxx.com>
Date: Wed Jul 27 11:20:47 2022 +0000
[HOTFIX] 版本迭代功能 bug 解决
常见问题及命令使用
冲突解决(git rebase|git merge)
场景:本地开发分支落后远端分支
本地合并远程分支,解决冲突,提交
- dev
- f-a
推荐使用 git rebase 方法
常用命令:
- git rebase <分支名>
- git rebase --abort 撤销合入请求
- git rebas --continue 应用合并请求
commit 提交信息是线性的,直接应用分支 commit 信息
- 切换&&更新 dev 分支
- git rebase <需要合并的分支名>
- 发现冲突
- 解决冲突
- 提交修改
git checkout dev
git pull origin dev # 更新 dev 分支
git rebase f-a
# 发现冲突
build/docker_build.sh: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
# 解决冲突
git status
git add . # 提交修改
git rebase --continue
# 合并冲突
# 提交
git push origin dev
git cherry-pick 使用,合入指定 commit
场景:线上环境 BUG 修复后,仅合入 master,未合入 dev 分支
常用命令:
- git cherry-pick < commithash >
使用 cherry-pick 合入指定 commit ,可以合入多个指定的提交
git cherry-pick <commitHash>
以上的命令会生成新的提交 commithash
git cherry-pick <HashA> <HashB>
上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
git stash 暂存未完成的提交
场景:当在开发过程中,有比较紧急的需求插入时,当前在开发的功能又未完成时
常用命令:
- git stash
- git stash apply n(版本历史) —— 应用指定版本
- git stash pop ——应用栈顶版本
-
存储工作区和暂存区到堆栈
git stash save -u "需求只开发了一半" # -u 表示添加新增文件的修改 -
查看堆栈中的 stash 列表及内容
git stash list git stash show -
开发其他需求
git stash pop git add . git commit -m "需求完成" -
Commit 一些提交,然后提交到历史版本
git stash pop git add . git commit -m "需求完成" git push origin dev
git merge --no-off | git merge --squash
场景:在进行分支合并操作时,可以使用 额外参数来优化 commit 信息提交
-
--no-off
保留分支的 commit 历史信息
--no-ff指的是强行关闭fast-forward方式。可以保存之前的分支历史。能够更好的查看 merge历史,以及branch 状态 -
--squash
多个 commit 信息合并成一个 commit 信息
--squash 是用来把一些不必要commit进行压缩,需要进行一次额外的 commit来“总结”一下,然后完成最终的合并。