1. 分支概念:
假设当前文件为版本1,此时需要在原有基础上删除/增加一些代码,在git内部是如何实现的呢?
将版本1的所有文件进行复制,然后再进行修改生成版本2,这样显然是不合理的。git中在版本2中只保存修改的部分,未变动的文件不会保存在版本2中,然后在版本2和版本1之间创建一个指针,将版本2指向版本1。之后在版本2的基础上生成版本3也是如此,这样就形成一个链条
v1<--v2<--v3
(可以视为主干部分)。此时要在版本3的基础上同时开发两个不同的功能,就需要用到分支了
2. 修复线上bug思路:
假设此时正在开发功能4,此时版本3中某个功能出现了bug需要去修复,该怎么办?
按照之前的思路,需要将功能4写好的文件代码舍弃,回退到版本3进行修复,这样显然不合理。此时需要分支的参与:
上图中v4表示正在开发新功能,这是一条分支;v5表示修复版本3的一条分支,修复完后可以进行分支的合并为v5;当新功能开发完成后合并为v7。上述过程中并不会影响新功能的开发,又能将版本3的bug进行修复重新上线。
3. 分支操作:
假设在当前文件夹中已经有了三个版本,开始针对第2节的问题进行操作:
- 使用
git log
查看版本信息:
- 使用
git branch
查看分支信息:
上图表示目前处在master(主干)分支上
- 使用
git branch dev
创建新的分支dev:
- 使用
git checkout dev
切换到新创建的dev分支:
此时在dev分支开发功能是不会影响到主分支的。假设此时在dev分支下添加新功能,再次去查看分支信息:
可以看到出现
HEAD->dev
。此时再切换到主分支:
可以看到原来在dev分支的版本不见了,并且代码也恢复为版本3的代码。
- 使用
git branch bug
创建新的分支bug用于修复版本3的bug。因为是要修复版本3(即master分支)的bug,所以再创建bug分支前要切换到master分支- 在bug分支下修复好版本3中的bug:
- 将bug分支合并到master中。首先需要切换回master中,然后使用
git merge bug
合并bug分支(此时不会产生冲突是因为bug分支就是在当前的master上进行修改的,不存在9的情况):
- 合并完后bug分支已经没有用处,此时使用
git branch -d bug
删除bug分支- 将开发的新功能合并到master分支中。但是如果此时也切换到master中并使用
git merge dev
出现冲突:
因为新功能的代码可能和master的代码有冲突(此时的master是修复了bug的master,
this is version_3
变为了this is version_3(fix bug)
,而dev分支中保留的还是this is version_3
)。此时需要手动去修复冲突的部分:
如上面的冲突所示,需要将
this is version_3
以及HEAD和dev的标识删除
- 解决完冲突后再
add
和commit
即可
4. 参考
https://www.bilibili.com/video/BV17r4y1K7HB?p=9–>https://www.bilibili.com/video/BV17r4y1K7HB?p=12