分支是Git很重要的一个特性,可以把分支简单理解为一个快照。当初始化仓库时,默认会有一个master分支,如果我在master分支下新建了一个test分支,那么test分支就是master的一个快照
使用场景
开发新功能
开发新功能的流程通常是这样的
- 开发一个网站
- 为实现某个功能,创建一个分支
- 在分支上完成开发工作
- 功能开发完毕,并且测试通过后,合并到主分支
代码表示
# 从master分支创建pay分支,完成支付功能开发工作
$ git branch pay
# 功能开发完毕,合并pay分支的代码
$ git checkout master
$ git merge pay
# 推送到远端
$ git push
# pay分支已经没用,可以删除了
$ git branch -d pay
紧急Bug
很多时候,可能会有这样的情况:你正在某分支上开发新功能,突然有一个紧急Bug需要修复,工作流程是这样的
- 把未开发完成的功能暂存下
- 切换到原先已经发布到生产服务器上的分支,假设叫master分支
- 创建一个为修复bug的分支,完成修复问题
- 测试通过后,回到master分支,把修补分支合并进来,推送到生产线上
- 切换到之前实现新需求的分支,继续工作
代码表示
# 从master分支创建pay分支,开发支付功能
$ git branch pay
# 来bug了,但支付还没有开发完成。保存一下现场,等bug修复后回来继续工作
$ git stash
# 从主分支切出一个issue01分支,修复bug
$ git checkout master
$ git checkout -b issue01
# bug修复完成并测试通过,合并issue01分支,推送到远程
$ git checkout master
$ git merge issue01
$ git push
# 恢复现场,继续开发支付功能
$ git checkout pay
$ git stash pop
分支管理
创建分支
# 创建pay分支
$ git branch pay
# 切换到pay分支
$ git checkout pay
# 合二为一
$ git checkout -b pay
推送分支
# 把pay分支推送到远端
$ git push -u origin pay
合并分支
把pay分支的代码合并到master分支
$ git checkout master
$ git merge pay
查看分支
# 查看本地分支
$ git branch
# 查看远程分支
$ git branch -r
# 查看所有分支
$ git branch -a
# 查看最后一次提交的信息
$ git branch -v
$ git branch -r -v
$ git branch -a -v
# 查看哪些分支合并进了当前分支
$ git branch --merged
# 查看哪些分支未合并进当前分支
$ git branch --no-merged
删除分支
# 删除远程pay分支
$ git push -d origin pay
# 删除本地pay分支
$ git branch -d pay
删除分支前要确认分支已经被合并到主分支,否则是无法删除的。如果确实要放弃已经在分支上修改的工作成果,可以使用-D
强制删除
保存现场
当你正在开发一个功能,功能还没开发完成,突然线上爆了一个Bug需要紧急修复,这时怎么办?功能没完成就直接commit是不合适的,这时候保存现场功能就派上用场了
在功能分支执行$ git stash
命令,保留一下现场,然后你就可以切换到主分支去修复bug了。bug修复后,切换到功能分支,执行$ git stash pop
恢复现场,继续之前的工作