开发工具: git 03、工作流之功能分支工作流

本文详细介绍了一种适用于小团队内部协作的Git工作流程,包括本地开发、特性分支开发、热修复分支使用、冲突解决及代码合并过程。适用于需求不频繁的内部系统,帮助团队高效管理代码版本。

适用场景

面向内部的那种需求不是很频繁的内部系统,5人以内的项目。

本地开发

首先,在第2节的基础上张三和李四各先修改下代码并完成一次 commit

  • 张三

    1. 先拉取最新的代码 git pull origin master
    2. 写代码
      功能分支工作流01
    3. 提交到远程
      02
  • 李四

    1. 拉取最新的 master 分支
      03

    2. 写代码
      功能分支工作流04

    3. 提交到远程
      05

  • 张三

    1. 拉取最新的 master 分支
      06
    2. 存在冲突则解决冲突
      07
      当前 master 指向的是最新的一个 commit。HEAD 指向 master
      功能分支工作流08

此时需要开发一个新的功能,由张三认领,他从 master分支 拉一个特性分支。比如 feature/001分支

git checkout -b feature/001

功能分支工作流09
这个命令在创建分支的同时也切换到这个分支上去,相当于 git branch feature/001 + git checkout feature/001

此时 master 继续指向 750,但是多了一个 feature/001 指针,指向 750,同时 HEAD 切换为指向了 feature/001
功能分支工作流10

接着就可以在 feature/001 分支上做一些开发了,主要是为了新功能写代码,而且一般每天都会执行一次提交,保证工作内容不会丢失。
功能分支工作流11

commit 之后会长出来一个新的 commit 记录
功能分支工作流12
然后 feature/001 指向了这个 commit,HEAD 继续指向 feature/001
功能分支工作流13
功能分支工作流14
假如此时突然接到一个通知,需要解决一个线上的 bug。此时就需要切换到 master分支,然后基于当前的 master分支 拉一个新的分支专门修复当前线上的这个 bug。比如 hotfix分支
功能分支工作流15
功能分支工作流16
注意在切换到 master分支 之前,需要先提交 feature/001分支 的所有代码,否则是不允许切换分支的。

git add --all .
git commit -m "xxx"
git checkout master
git checkout -b hotfix/001

一旦切换到 master分支,工作区的所有代码会给 git 还原为 master 指针指向的那个commit object 的所有快照,git 会负责对代码文件进行新增、修改或者删除,彻底还原到那个快照版本。

接着拉取并且切换到 hotfix/001 之后,就可以基于 master 的代码来进行 bug 修复了,修改代码,解决 bug,进行测试,然后在 hotfix/001 上可以提交代码。这里假设 hotfix/001 分支的代码和 feature/001 分支的代码,都对同一行(图中第12行)进行了不同的修改,为了后面的合并冲突解决进行准备。
功能分支工作流17
这个时候,master 继续指向 750feature/001 指向 67a,然后从 750 长出来一个新的 commit object——e69hotfix/001 指向 e69。也就是说,从 750 之后,分叉长出来两个commit object67ae69
功能分支工作流18
接着,对 hotfix/001 的代码需要进行测试,然后测试通过之后,就可以将 hotfix/001分支 合并到 master分支,准备上线了。注意切换前要先 commit 当前分支。

git add --all .
git commit -m "xxx"
git checkout master
git merge hotfix/001

19
这次 merge 被称之为 fast-forward(快进式的merge),为啥呢?因为看一下此时的 commit 树,master 指针只要直接移动到指向 e69,就可以完成本次合并了,这就是 fast-forward。但是此时 HEAD 就是指向 master 的。

功能分支工作流20
此时就可以用 master 代码来部署解决 bug 了。

同时由于已经合并到 master分支 了,所以可以删除 hotfix/001分支

git branch -d hotfix

功能分支工作流21

然后切换回 feature/001分支,继续新功能的开发

git checkout feature/001

功能分支工作流32

完成代码,然后最终 commit 一次,结束 feature/001 的代码开发,同时基于这个分支的代码完成测试。
功能分支工作流22

此时会从 c3 长出来一个 commit——589feature/001 指向 589,而且 HEAD 指向 feature/001
功能分支工作流23

接着就要将 feature/001分支 合并到 master分支 了,完成功能的合并

git checkout master
git merge feature/001

在这里插入图片描述
解决冲突后 commit
25
此时,因为 master 指向的 commit e69,是不能直接移动到 feature/001 指向的 589 的,因此需要执行一个 3-way merge。此时会创建一个新的 commit object——182,它的 父commite69589。此时,master会指向最新的 commit 即 182feature/001 继续指向 589,同时 HEAD 指向 master
功能分支工作流26

接着就可以删除 feature/001 分支了

git branch -d feature/001

功能分支工作流27

推送远程

张三要将自己本地的 master 代码推送到远程去。
28
此时本地的 master 跟远程分支 origin/master 是关联起来的,origin/master 就对应着远程仓库的master分支
功能分支工作流28
执行上述命令之后,实际上会做两件事情:

  • 修改本地的 origin/master 分支,移动到和本地的 master 分支一样

  • 将本地的 commit 提交历史推送到远程仓库,使远程仓库的 master 是指向最新的那个commit

功能分支工作流34

之后,李四也要push代码
29
会发现程的仓库里的 master分支 代码已经有人提交过了,此时是不能直接推送新的代码到 master分支 的。并且要求先执行 git pull 命令
30
该命令实际上会做如下两件事:

  • 将远程仓库的 commit 提交历史拉取下来跟自己本地的提交历史进行合并
  • 将本地的 master 分支对应的 commit 跟远程仓库的 master 分支对应的 commit 进行合并

功能分支工作流31
之后再推送到 远程master

git push origin master

张三做最后一个操作,就是执行一次 git pull,将远程仓库的提交历史拉取到本地进行合并,同时将远程仓库的 master 跟本地的 master 进行合并,让本地仓库跟远程仓库保持一致。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值