Git代码冲突
最近在使用SVN版本管理碰到了一点
冲突问题
,就想测试一下Git的代码冲突。
冲突的文件
,
什么情况会发生冲突
,
冲突的解决方法
等等
测试用例
1、新建一个码云仓库(因为码云比GitHub快,所以用码云做测试),并准备a.txt文件做用例
2、使用两个两个账户(A和B)对a.txt进行拉取,并同时修改
3、B先修改内容;A不拉取新的代码就进行提交
4、冲突
结果
B账户能顺利的提交代码,但是A显示冲突
此时,我们肯定想下意识的拉取最新的代码;但是拉下来,发现命令行多了一个merging的表示,并且内容很奇怪:
解决方案一
步骤
1、把冲突的文件复制出去
2、查看历史版本,选择冲突的上一版本进行回退
3、拉取最新的代码
4、将复制出去的文件代码打开,找到冲突的部分在最新的版本的代码上复原
5、提交
图例
查看历史版本,并选择回退
拉取最新的代码
重新修改,并提交文件
冲突文件中多出来的东西是啥
为了查看冲突中多出来的是啥,我们在进行一组冲突测试;
当前文件内容:
B账号提交后的内容
A想要提交的内容:
冲突后:
我们回退后重新提交,然后看版本;于是我们可以进行大胆的试验
解决冲突方案二
步骤
1、冲突后,复制文件出去
2、直接根据冲突文件中的版本号,回退到冲突文件的版本号
3、将原文件和回退文件进行整合
图例
B账户又进行新增提交
A账户还是老样子
冲突后的内容
直接回退到冲突代码中的指定版本号
基于此版本进行修改提交
错误示范
有些小伙伴肯定想冲突了把冲突的地方删掉然后在提交,那肯定是不行的
未提交拉取最新代码
之前就好奇,一遍写代码一遍拉取最新的代码会怎样呢?
并且拉取的最新的代码改动的就是我们正在写的这个代码。
还是来测试一下
事前准备
清空文件内容,重新进行测试。
测试中
先让B提交代码,A正常写代码
注意,A是基于原先旧版本进行写代码
此时,让A来拉取最新的代码;看看有什么变化
按照他的意思,提交修改,发现代码果然又冲突了
解决方案
上网看了一下一些方案,下面两个
git reset 进行强制覆盖
这个跟前面解决冲突
的思想一样。
- 复制当前文件
- 回退版本
- 重新拉取
- 结合修改
git stash
1、回到初始状态
;B提交了代码,A在写代码
2、A拉取最新代码
3、执行提示的stash
命令
4、git pull
拉取最新代码
5、git stash pop
复原本地代码
6、删掉标识符,重新推送代码
原理:貌似是一个栈结构,用于记录用户操作数据;可以进行一个暂存的操作,具体后续有时间会继续研究。
结论
还是会发生代码冲突,在实际开发中;还需要借助分支管理,还需要会解决Git冲突问题。