GitFlow
1 GitFlow 规范
GitFlow 是团队开发的一种最佳实践,将代码划分为以下几个分支:
- Master 主分支,上面只保存正式发布的版本
- Hotfix 线上代码 Bug 修复分支,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。
- Feather 功能分支,当开发某个功能时,创建一个单独的分支,开发完毕后再合并到 dev 分支。
- Release 分支,待发布分支,Release分支基于Develop分支创建,在这个Release分支上测试,修改Bug。
- Develop 开发分支,开发者都在这个分支上提交代码。
2 开发者工作流程
目前,远程仓库中有 master 分支、dev 分支两个保护分支。
① 克隆仓库并切换到开发分支
克隆远程仓库到本地,默认只有 master 分支。
git clone 远程仓库地址
创建与远程仓库关联的 dev 分支
git branch dev origin/dev
git switch dev
# 或者 创建关联并切换
git switch -c dev origin/dev
# 再或者,同样创建关联并切换
git checkout -b dev origin/dev
② 基于 dev 分支创建功能分支并进行开发
创建分支并切换
git branch 分支名
git switch 分支名
# 或者
git switch -c 分支名
# 再或者
git checkout -b 分支名
将本地的功能分支推送到远程仓库并建立联系,注意是否需要将功能分支推送到远程仓库,这取决于项目的开发流程和要求。
git push --set-upstream origin/分支名
可以使用命令查看本地分会与远程仓库分支的对应关系
git branch -vv
在功能分支下开发,进行大量的添加提交,与远程仓库的功能分支同步。
git pull
git add -A
git commit -m "提交信息"
git push
...
③ 同步 dev 分支的最新内容到本地的功能分支
dev 分支拉取更新。
# 切换到 dev 分支
git switch dev # 或者 git checkout dev
# 拉取远程更新
git pull
将 dev 分支中的更新添加到功能分支中。
# 切换回功能分支
git switch 功能分支名 # 或者 git checkout 功能分支名
# 将 dev 分支的新内容 rebase 到功能分支上, 这个时候可能会出现冲突,如果出现冲突手动确定保留哪些,再添加提交
git rebase dev
rebase 的过程中,可能会出现冲突,这时候需要手动修改保留哪些内容,然后添加提交,并继续 rebase。
# 添加提交
git add -A
git commit -m '提交信息'
# 继续 rebase
git rebase --continue
最后将本地功能分支的修改推送到远程仓库,注意,由于进行了 rebase,我们不再进行 pull 操作,直接进行强制 push,否则 rebase 时候出现的冲突还会再出现一遍。
git push -f
④ 发起 pull Request
在远程仓库上发起 pull request,这里以 Gitee 为例。
发起 pull request 之后,管理员会进行审查、测试,确保无误会进行合并,当 pull request 通过之后,我们需要在本地切到 dev 分支,拉取合并后的最新内容。
git switch dev # 或者 git checkout dev
git pull
最后,可以将本地的功能分支与远程仓库的功能分支删除。
# 删除本地功能分支
git branch -d 分支名
# 删除远程仓库功能分支
git push origin --delete 分支名