Git笔记:GitFlow工作流模拟、分支管理、使用规范

参考链接

http://www.ruanyifeng.com/blog/2012/07/git.html

http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md#25-pull-requests

https://github.com/xirong/my-git

https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

规范

分支的命名限定在以下范围(master | dev | develop | release | feature/xxx | hotfix/xxx | fix/xxx ) xxx为任意内容

Eg. 1.feature/酒店信息管理 2.hotfix/订单流程更改

每次commit时,添加的描述信息需要有一个特定的前缀,限定在以下范围(feat|doc|test|docs|chore|refactor|fix|style| perf): xxx 注意冒号后面有一个空格

Eg. 1.feat: 查看酒店信息功能完成 2.fix: 浏览酒店bug修复

例子

做个例子来模拟一下这样的一个开发场景

1583406961320

  • master:主分支
  • release:预发布分支
  • dev:开发分支
  • feature/xxx:开发某个功能
  • fix/xxx:修复功能

模拟

建了三个文件夹,模拟三个成员【person1、person2、person3】进行开发

用了三个不同的终端进行控制

首先,三个人都给他clone下来

写完才发现person3没用到,就当他不存在吧

1583409967242

person1一开始就给他建好了master和release分支,然后push到远端

git checkout -b release
git add .
git commit -m 'feat: xxx'
git push --set-upstream origin release

git checkout -b dev
git add .
git commit -m 'feat: xxx'
git push --set-upstream origin dev

这个时候person2和person3还没有这两个branch,最好pull一下

1583403473485

此时git仓库的状态时这样的

1583407171224

有三个分支,但是分支里面啥也没有

每个人进行工作

举个例子

person1拉了一个分支为feature/a

做了以下工作:

  • 创建一个a.txt
  • 在readme.md中添加【person1到此一游】

person2拉了一个分支为feature/b

做了以下工作

  • 创建一个b.txt
  • 在readme.md中添加【person2到此一游】

person1先合并

person1在feature/a上commit了两次,然后拉取dev分支进行merge

很显然,这时候他是第一个做这个工程的人,什么都没变,直接就push上去了

git checkout -b feature/a
git add .
git commit -m 'feat: xxx'
git add .
git commit -m 'feat: xxx'
git fetch origin dev
git checkout dev
此时指向的是dev分支,进行merge
git merge feature/a --no-ff

注意!!!:

merge合并的时候最好使用--no-ff指令!

git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。

git merge 则不会显示 feature,只保留单条分支记录。

1583409334691

1583407355116

person2准备合并

这个时候b的工作也做完了,准备合并到dev分支

1583407490370

但是这时候出了一些问题

直接push的话显示是不行的,因为person2的dev滞后与origin dev

1583405303289

于是我们尝试先fetch一下origin dev

git fetch origin dev
git checkout dev

新的问题出现了

当person2 checkout到dev分支上的时候,会提示版本滞后

1583407671903

这个时候还挺奇怪的,因为明明把远端仓库的dev分支fetch下来了,为什么还会behind?

因为fetch下来以后发现比本地的dev还要新,但是git不会自动帮你合并

img

这时候有两个选择

  • git pull
  • git fetch + git merge

推荐使用git fetch+git merge

Git中从远程的分支获取最新的版本到本地有这样2个命令:

  1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git merge origin/master
 首先从远程的origin的master主分支下载最新的版本到origin/master分支上

 然后比较本地的master分支和origin/master分支的差别

 最后进行合并

 上述过程其实可以用以下更清晰的方式来进行:
  1. 推荐
git fetch origin devr:temp
git diff tmp 
git checkout dev
git merge temp
git add .
git commit-m"xxx"
git push origin dev

​ 从远程获取最新的版本到本地的temp分支上

​ 之后再进行比较合并

​ 最后可以把temp分支删掉

  1.   git pull origin master

​ 上述命令其实相当于git fetch 和 git merge

​ 在实际使用中,git fetch更安全一些

​ 因为在merge前,我们可以查看更新情况,然后再决定是否合并。

​ 此外,使用pull还会产生一个问题,git会自动帮你commit一次,放在系统里好像会引起不规范

1583408305230

merge时候会提示冲突的地方,手动修改完提交就可以了

1583408393214

这时候的状态大概是这样的

1583408560421

release分支和master分支

和上面类似 dev分支开发到一定时期放到预发布分支release上

之后可以发布到master分支上

1583408660380

更清晰一点看就是这这样子

1583406961320

tag

可以先git checkout到某一个节点,然后用git tag打上版本号

1583408948462

模拟工具

https://learngitbranching.js.org/

猜你喜欢

转载自www.cnblogs.com/cpaulyz/p/12422311.html