2-3-需求开发到一半需要改别的分支的bug该怎么办呢? git版本控制----stash,branch

git版本控制

场景:
你的项目上线了,现在开发第二个版本,这个时候线上第一个版本出问题了,现在必须马上修改,如何操作?
这个时候第二个版本已经开发了很多了,现在git status已经有很多的红色文件了,怎么办?
第二个版本的功能肯定不能推上去,而第一个版本有bug要修改,怎么办?

git版本控制---stash

操作:
1,执行命令:git stash,这是找到所有红色的文件,也就是被修改的文件,把它们拿走,临时存到一个地方了,
这样git status,就没有红色文件了,并且你开发的内容也不见了,被存到了另一个地方了,

2,然后修改bug,然后提交,这个bug就解决了,然后你git add . git commit ...
我需要继续开发,怎么开发?

3,执行命令:git stash pop,这样就回来了,并且我们开发的内容回来,而且我们修改的bug也已经修改了,就可以继续开发了,

会出现的问题:
你在没有删除日韩的之后,stash了,这个时候保存的是有日韩的,然后删除了之后,pop的时候出现了合并,
合并的时候自动帮我们检测了,来做这个事情,这就是一个自动合并的功能,这种是能合并的,但是有些情况是合并不了的,

冲突:
假设你修改bug的时候,如果你不是删除日韩,然后新增了一个在线,这个时候提交修改的内容,
然后回来git stash pop,这个时候就会报错了,冲突了,
CONFLICT (content): Merge conflict in api/tests.py

所以pop的时候有两种情况,一种是可以自动合并的,一种是有冲突的,

什么时候自动合并?什么时候有冲突了呢?
两个用户修改了同一个文件的同一块区域,git会报告内容冲突。
我们常见的都是这种,后面的解决办法也主要针对这种冲突。

这种冲突了怎么办?
就要手动解决冲突,没有好的解决方法,但是如果有两千个冲突怎么办?
冲突要会看,==========,这是一个分割线,上面是之前的,下面是你后面写的,
然后手动解决了冲突,就可以提交代码了,commit,

记住:如果你正在写代码,然后线上有bug,你要去修改,你就需要git stash(这个只会保存红色的文件),
然后修改之后回来的时候git stash pop,这个时候可能会有冲突,
有了冲突不要着急,如果有两千个,也不要着急,有一个软件,可以把两千个都找到,

总结:git stash的用法:
1,git stash,这是放入一个缓存中,
2,git stash pop,这是把第一个暂存的拿出来,
3,git stash list,所有的暂存的记录,默认是拿回来第一个,
4,git stash apply 编号,将指定编号的记录重新拿到工作区(可能会有冲突,)
5,git stash drop 编号,删除指定编号的记录,
常用的就是前两个,

git版本控制---branch

上面是方式一,解决方法,
这种不太好,公司里面常用另一个方法,就是branch的东西,
下面讲解方式二,

场景:
现在开发一个功能,然后开发到一半的时候,需要马上上一个功能,这个时候怎么办?

1.新建分支

新建分支

git branch dev

这是创建了一个分支,而且是copy了一份代码,
这个时候这个分支和master分支是一样的,以后在代码开发的功能在dev分支做,

查看分支

git branch

切换分支

git checkout dev

2,这样你就有两套代码了,然后你就可以在dev开发新的功能,在dev提交的代码是不会影响到master,
然后你切换到master,你会发现代码是没有变化的,也就是dev的代码没有影响到master

3,现在dev的功能开发到了一半,然后需要马上上线一个功能:日韩,可以在master分支中增加一个日韩,
然后直接提交了,但是一般我们不直接在master分支提交代码,因为风险太大了,
所以规定就是不能在master分支修改

4,最好的方案是创建一个分支,
执行命令:git checkout -b rh,然后这个分支是和master分支一样的,在这个分支修改bug,新增紧急的功能,新增之后,比较代码
这个时候有三套代码了,1个是master,1个是dev有新开发的功能,1个是rh,这有我们新增的功能,

合并分支

5,现在要合并代码了,
rh分支和mater分支,先回到master,
执行命令:git merge rh,这一步就是把代码合并到master了,
然后在master分支就有rh的提交日志log了,

删除分支

然后删除这个分支,
执行命令:git branch -d rh,这样就把rh分支删除了,
所以面试问你如果有线上bug怎么办?就是创建一个分支,然后修改,提交,合并,删除新建的分支,

6,然后现在我开始开发了,切换到dev分支,git checkout dev,
然后可以继续开发了, 但是这个分支是没有修改的bug的,这个要记住,你可以现在合并,也可以后面合并,现在你只是写你的功能就行了,
但是一般是后面合并,因为是协同开发,你改了bug,其他人可能不知道,

7,然后现在继续开发,新的功能开发完了, 然后在dev分支提交,
现在需要上线新功能,就要把dev和master分支合并了,
切换到master分支,
执行命令:git merge dev,这个时候报错了,因为有的代码dev分支没有,而dev分支有的master分支没有,怎么办?

8,这个时候没有冲突,但是弹出需要一个合并记录,然后输入你的这次合并的注释,然后保存退出,就可以了,合并成功了,
这个时候看master的log是所有的都有的,

9,但是如果是修改的内容是同一行,会冲突,冲突了就要手动修改了,

公司里面修改bug,必须要创建bug分支,处理之后合并master分支,master永远保持正确的代码,然后删除bug分支,
stash就是个人使用的,

删除远程分支

git push origin --delete dev
posted @ 2020-05-06 14:17  技术改变命运Andy  阅读(1801)  评论(0编辑  收藏  举报