git的一些技术的分支操作笔记。
分支操作总览
下面的表格是git分支操作的总结表格
命令 | 说明 |
---|---|
git branch X /git checkout -b X |
第1个命令仅仅创建分支但不切换,第2个命令创建并切换到新分支 |
git branch |
查看当前所有分支列表 |
git log --oneline --decorate --graph --all |
列出当前所有分支及其提交的分支图 |
git branch -v |
查看所有的分支及其最后一次提交 |
git branch --merged /git branch --no-merged |
查看已经合并或者没有合并的分支 |
git checkout X |
切换到分支X |
git branch -d X /git branch -D X |
删除分支X,强行删除分支X(即使暂存区有代码) |
分支工作流
参考Git分支简介中的介绍,想象一种典型的工作流,看看如何使用git的分支管理进行操作。想象如下的一个典型开发场景:小王所在的团队基于master管理代码,小王参与了一个新特性的开发,需要基于master分支开发新的任务,与此同时他有时需要修复master分支上的一些小bug。现在小王需要完成如下的操作
- 创建开发分支iss53,并在该分支上开发代码;
- 紧急修复主线上的问题,创建hotfix分支,并在上面修复代码;
- 将hotfix的修复代码合并到主线上,并上传到主线;
- 切换回iss53分支,继续完成新功能开发,开发完成后将该分支的所有修改提交到master分支
新建分支
创建分支iss53,并在该分支上工作,你在该分支上做了部分提交和修改
|
|
切换分支
此时发现主干需要修改紧急bug,于是将iss53分支的修改提交之后切换到master
|
|
需要注意,在切换到master分支之前需要将iss53分支上的修改提交,或者使用git stash命令将这些没有提交的还存在在暂存区的修改处理干净。继续在hotfix分支操作,基于这个分支修改代码,
|
|
合并分支1
在hotfix上修复代码之后,需要将修复之后的代码合入到master分支,
|
|
删除分支
如上图所示,此时hotfix分支和master分支的代码合并,hotfix的问题已经修复,所以需要删除hotfix的分支
|
|
注意,如果hotfix的暂存区仍然有代码,可能使用上面的命令无法删除,需要使用下面的代码删除分支
|
|
继续开发
删除hotfix分支之后,继续返回iss53分支开发,
|
|
合并分支2
假设在C5这个快照的节点,iss53的开发任务完成,需要将开发分支的代码回合到master分支,操作与之前切换到master,然后合并,与之前的合并分支1的操作一样
|
|
合并分支之前的图如下所示
此次合并与之前的合并分支1不同,iss53当前节点的父节点向上追溯无法追溯到C4这个节点,所以git在此处做了一个合并提交,它新建了一个commit的节点C6,将C4和C5的快照进行比较之后合并到C6,合并后的节点如下图所示
如果没有发生冲突,那么一切ok,删除iss53即可,任务完成。
合并分支之冲突解决
对于上面的合并分支2的情况,如果C4和后面的C5修改了同一个文件的同一行,那么会有冲突发生。以下为例,可以git接冲突的方法解决后合并。
冲突如下
其中上半部分是当前的master分支的情况,下面的iss53的情况的,可以手动解决冲突后继续合并
可以看到新建了校验和为b700510的节点,master和iss53分支均合入到该节点。
全文完🚀