Git分支
在git中使用分支非常简单,只需要使用Git branch命令即可:
$ git branch test #新建test分支
此时使用git branch查看一下分支:![](https://img-blog.csdnimg.cn/20210126163843230.png)
此时的确多了一个分支,但当前分支仍旧在master上,如果觉得自己起的分支名不够那么有规范,还可以修改分支名,使用git branch -m test develop,也就是说把test分支名改为develop,
如果不需要develop这个分支,可以使用命令git branch -d develop删除。如果想要切换到develop分支上,使用git checkout develop即可。注意在删除分支的时候,除了当前所在分支无法删除之外,其他分支均可删除,如果想删除当前分支,需要先切换至其他分支上去。其中*号代表当前所处分支。
首先我们切换到develop分支,然后追加两个文件,并两次commit。
![](https://img-blog.csdnimg.cn/20210126165330373.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
然后查看一些git记录
![](https://img-blog.csdnimg.cn/20210126165952706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
可以看出develop比master分支前进了两次commit,在这两次的commit中,新增了两个文件,如果想切换回原来的master分支,执行命令git checkout master,查看一下文件列表,
![](https://img-blog.csdnimg.cn/20210126181303664.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
发现并没有增加的那两个文件,这是因为我们增加的这两个文件,是在不同的分支,只要切换回develop分支,文件就会出现了。
如果要切换回哪个分支,首先这个分支必须存在,如果没有这个分支,那么在git checkout分支的时候,加上-b参数就可以了。如果这个分支本身就存在,那么git回直接切换过去,如果不存在,Git回帮你创建一个,然后再切换过去。
![](https://img-blog.csdnimg.cn/2021012618162158.png)
Git切换分支的时候发生了什么
前面提到,在develop新增的两个文件,切换回master分支的时候就不见了,再切换回develop的时候就又出现了,其实不是将目录或者文件复制出来,改动之后放回去,在Git切换分支的时候主要做了以下两件事:
1.更新暂存区以及工作目录。
Git在切换分支时,会用该分支指向的那个Commit的内容来更新暂存区以及工作目录。但在切换分支之前,所做的改动则会留在工作目录中,不受影响。
2.变更HEAD的位置
除了跟新暂存区以及工作目录的内容之外,HEAD也会指向刚刚切换回去的那个分支。
假设现在还在develop分支,切换到master之前,新增了一个cat.html文件,同时也改动了welcome.html文件内容,此时的状态为:
![](https://img-blog.csdnimg.cn/2021012619192741.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
当前的welcome.html状态为modified,而cat.html状态为Untracked,此时如果不commit就直接切换回master分支,会用该分支指向的那个commit的内容更新暂存区以及工作目录,但在切花分支之前所做的改动则会留在工作目录中,不受影响。
![](https://img-blog.csdnimg.cn/20210126192429235.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
然后查看一下文件列表:
![](https://img-blog.csdnimg.cn/20210126192611538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
也就是说,切换分支并不会影响已经在工作目录中的那些改动。
合并分支
在上面的例子中,从master分支开了一个develop分支,并做了2次commit,现在我们任务执行的差不多了,就要准备合并回来了,如果想用master分支合并develop分支,那么就需要先切换回master分支,git checkout master,然后使用git merge develop进行分支合并。
![](https://img-blog.csdnimg.cn/20210128204203534.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
然后查看文件列表
![](https://img-blog.csdnimg.cn/20210128204306517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
由于master分支已经合并了develop分支,所以在develop分支新增的文件也出现在了master分支。在这里推荐大家使用一个git提交记录的查看工具,具有可视化界面,能够清除的看到自己在哪个分支上,大家可以使用gitk命令,也可以使用qgit命令,两者都需要使用sudo apt install 进行安装。qgit界面如下,首先需要勾选三个复选框。
![](https://img-blog.csdnimg.cn/20210128204848980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
可以看到当前我们所处分支魏develop分支(高亮),且我们的master分支落后develop分支两次提交,此时我们merge之后,刷新一下该界面,查看一下。
![](https://img-blog.csdnimg.cn/20210128205032590.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L291eWFuZ2FuZHk=,size_16,color_FFFFFF,t_70)
在合并之后,其进度已经跟develop分支同步,并且,当前master的分支下的文件状态,已经跟develop分支完全一致,这是非常需要值得注意的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)