多人协作 git 工作流规范

434 阅读4分钟

多人协作 git 工作流规范

本文用于团队多人开发,多环境部署协作工作流,用于管理项目版本正常迭代上线

image-20220718142723747.png

基本分支管理

「 master」「 dev 」「 feature 」

master 和 dev 分支是长期存在的分支,需要开发人员定期维护。

master 分支主要用于对外发布稳定的新版本,develop 分支表示最新开发的代码分支,这两个分支都不允许开发者直接在该分支上进行代码提交和修改,只允许其他分支进行合入。

  • master 正式发布版本历史
  • dev 功能集成分支
  • feature 功能分支

工作流

规定一般开发工作流过程

日常功能开发

当明确开发功能点后,开发人员需要从 **「 功能集成分支- dev 」**checkout 出自己的 feauture 分支:fearue/function-namef-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 ——应用栈顶版本
  1. 存储工作区和暂存区到堆栈

    git stash save -u "需求只开发了一半" # -u 表示添加新增文件的修改
    
  2. 查看堆栈中的 stash 列表及内容

    git stash list
    git stash show
    
  3. 开发其他需求

    git stash pop
    git add .
    git commit -m "需求完成"
    
  4. 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来“总结”一下,然后完成最终的合并。