参考:https://www.funtl.com/zh/git/Git-%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%AE%80%E4%BB%8B.html
1、集中式工作流
1.1示例:
1.1.1有人先初始化好中央仓库
在github上建立一个统一的仓库
1.1.2所有人克隆中央仓库
1.2.3小明开发功能
在本地git中创建文件
1.2.4小红开发功能
在本地git中创建文件
1.2.5小明发布功能
git add 文件名
git commit -m “描述”
git push origin master
1.2.6小红发布功能
如果小红像小明一样直接push会报错,这避免了小红覆写正式的提交。她要先 pull 小明的更新到她的本地仓库合并上她的本地修改后,再重试。如果远程的仓库和本地的仓库文件一样,git push 就会直接成功;
git pull origin maste (如果你本地有的目录(应该是自己新建的目录)和远程仓库的目录名字,或者文件名字一样,此时会被覆盖写入),个人感觉,在自己pull之间,最好将本地的代码单独保存一份
git push origin master (好像不需要再add 和commit了,因为之前已经提交了(add/commit),现在只需要推送,如果之前没有add,还是需要先add。commit)
最好每一个个体独立创建一个分支。如果有大的合并的话,在单独合并的master中
2、功能分支工作流
2.1示例
2.1.1小红开始开发登录功能
首先创建分支
创建分支: $ git branch 分支名
查看所有的分支: $ git branch
切换分支: $ git checkout 分支名
推送代码到远程仓库 $ git push origin login(分支名) //此时远程仓库会自动生成一个login分支。并且里面有我们推送的代码
当login(登录功能开发完毕),之后请求和主分支进行合并,合并完成后
如果需要将远程的分支删除
git push origin --delete login
如果需要将本地的分支删除
git branch -D login
3.GitFlow 工作流
3.1示例
3.1.1
第一步为 master 分支配套一个 develop(开发) 分支,所有的功能合并到develop上。简单来做可以本地创建一个空的 develop 分支,push 到服务器上:(一班的话开发组长将这一步完成)
3.1.2.
小明(已经clone master分支了)
git branch -a,查看所有分支名称如下(包含远程分支)
git checkout -b develop origin/develop,作用是checkout远程的dev分支,在本地起名为develop分支,并切换到本地的develop分支,此时远程的develop和本地的develop才会绑定关系,(origin/develop是远程分支)
3.1.3
基于develop创建新的分支(注意不能是master)
git checkout -b register (创建register分支)
开发功能
git push origin register (push到远程仓库,远程仓库会创建register分支)
功能开发完成,创建合并请求
1.
2.
3.等待组长确认合并
3.1.4
当一个阶段开发完毕,准备创建预发布版本(基于develop)
git pull origin develop //拉取所有的develop代码
git checkout -b release-1.0.0 //创建预发布分支(基于develop分支创建)
git push origin release-1.0.0 //将代码推上远程仓库
完成测试之后
合并请求,由release-1.0.0合并到master(合并方式见之前的合并方式,合并的base选择为master)
3.1.5
git tag 1.0.0-RELEASE //给master版本打上标签
git push origin 1.0.0-RELEASE //将这个标签推向远程仓库
3.1.6
如果发现项目出现问题,可以提交问题说明
3.1.7
对项目进行打补丁
git fetch //将本地分支与远程保持同步
git branch <new-branch-name> <tag-name> // 会根据tag创建新的分支 示例:git branch hotfix_0004 1.0.0-RELEASE _0004代表补丁编号
完善bug之后
git pull origin hotfix_0004 // 推送到仓库中
将hotfix_0004合并到master中
切换master分支 ,将master中的代码拉取下来
git tag 1.0.1-RELEASE //给master版本打上标签
git push origin 1.0.1-RELEASE //将这个标签推向远程仓库
3.1.8
将一些没用的仓库清空