✨前言✨
📘 博客主页:to Keep博客主页
🙆欢迎关注,👍点赞,📝留言评论
⏳首发时间:20246月19日
📨 博主码云地址:博主码云地址
📕参考书籍:《C++ Primer》《C++编程规范》
📢编程练习:牛客网+力扣网
**由于博主目前也是处于一个学习的状态,如有讲的不对的地方,请一定联系我予以改正!!!
Git中的分支
- 1 理解分支
- 2 创建与切换分支
- 3 合并分支
- 4 删除分支
- 5 合并冲突
- 6 分支策略管理
- 7 BUG分支
- 8 删除临时分支
1 理解分支
在版本回退⾥,我们已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀。HEAD就不是指向提交,而是指向当前所在的分支!我们可以结合下图来理解:
也就是说,随着我们不断的提交,master分支也就会越来越长!
2 创建与切换分支
有下面两种方法:
第一种:
- git branch 分支名 //创建分支
- git checkout 分支名 //切换到该分支上
第二种:
- git checkout -b 分支名 //创建分支并且切换到该分支上
查看分支的命令
git branch -a //查看有多少个分支,以及可以看到当前处于那个分支
我们学会了创建和切换分支,如果我们在dev分支上对某个文件进行操作,然后进行add,commit一系列操作后,在切换回master分支,我们可以发现对dev分支上改动的文件,在master分支上是看不见的,这是为什么呢?那是因为dev对应的才是最新的提交,而master并不是在最新的提交时间线上,所以就会看不到提交!如下图所示:
3 合并分支
为了使得master分支上可以看到最新的提交,我们可以通过将dev分支合并到master分支上!
git merge 分支名 //把该分支合并到当前所在的分支
我们可以发现这里有一个fast-forward,这个是分支的合并方式,在这里就是将master指向dev当前的提交,具体有哪些常见方式,我们在后面后介绍到的!这里有这样一个印象就行了!
4 删除分支
git branch -d 分支名
就是将不在使用的分支删除掉即可!原理图如下所示:
5 合并冲突
我们接下来看这样的一个场景,我们在master分支上对某个文件(本文是创建file1文件进行实验)进行修改并且提交,而在dev分支上对同一个文件进行修改并且提交!场景的原理图如下图所示:
在上述情况下进行合并,git只能试图把各自的修改合并起来,但是这种合并就有可能会出现冲突!我们使用合并命令:
出现上述修改冲突然后需要提交修改后的结果就说明出现了合并冲突,如何解决这样的一个冲突呢?我们可以打开冲突的文件:
我们可以发现的是Git会⽤<<<<<<<,=======,>>>>>>>来标记出不同分⽀的冲突内容,我们只需要处理掉这个冲突,在进行add,commit操作进行提交就行了!此时的原理图如下所示:
另外,我们还可以通过以下命令来查看分支的合并情况!
git log --graph --pretty=oneline --abbrev-commit
6 分支策略管理
在分支合并哪里,我们看到了fast-forward的合并方式,它是怎么合并的呢?它就是直接将master指针指向了dev指针所指向的地方,但是利用这种合并方式,会有一个问题,就是我们把dev分支删除了之后,我们分不清master是正常提交的,还是通过fast-forward方式进行合并得到的!也就是说会省略掉分支信息!但是在合并冲突哪里,就不会出现这样的问题,那是因为我们master有新的提交,dev也有新的提交,然后我们要对冲突处理最后提交!简单来说就是就是不是采用fast-forward方式进行合并!那么如何解决这个问题呢?在git中我们可以禁止使用fast-forward方式进行分支的合并!命令如下:
- git merge --no-ff -m “合并说明” 分支名
–no-ff 参数,表⽰禁⽤ Fast forward 模式。禁⽤ Fast forward 模式后合并会创建⼀个新的 commit ,所以加上 -m 参数,把描述写进去!此时我们可以图解一下禁用与不禁用fast-forward的区别:
分支策略:在实际的开发中,master分支上存放的应该是稳定版本的代码,我们一般都是利用dev分支(可以存在多个开发的分支,多人共同协作开发)进行开发,在本地仓库上,我们是将master分支合并到dev上,进行代码测试,没问题之后,在合并到master分支上,然后在上传到远端仓库上进行部署!
7 BUG分支
顾名思义,其实就是专门帮助我们修复bug的分支,假如我们在dev分支上代码开发只进行了一部分,我们还不能进行提交,而master分支又出现了bug,又不想让这部分代码丢失,我们该怎么处理呢?我们应当使用如下命令,来隐藏工作区的内容,如果不隐藏,在master分支上的工作区也是看的见的(包括在BUG分支上),这个是我们不希望看到的,所以我们需要进行隐藏,在修复完bug之后再进行恢复!
- git stash //隐藏工作区中内容
- git status //查看工作区的状态
然后我们在创建BUG分支,修改bug,修改完之后,我们先将master分支合并到bug分支上进行测试,然后我们在合并到master分支上,然后我们在切换回dev分支,使用如下命令,查看隐藏工作现场:
- git stash list
然后我们在利用下面的命令进行恢复现场,
- git stash pop
stash@{0}
//删除指定的内容,不带红色的,默认删除的是第一个
恢复的同时会把stash也删了,我们还有另外一种恢复现场的方式,采⽤ git stash apply 恢复,但是恢复后,stash内容并不删除,我们需要⽤git stash drop stash@{0}来删除指定的内容;我们也可以多次stash,恢复的时候,先⽤ git stash list 查看,然后恢复指定的stash,⽤命令git stash apply stash@{0}!
8 删除临时分支
这种情况,我们创建了一个分支,开发了对应的代码并且已经提交了,但是还没有合并master分支,对于这种临时分支,我们要采用强制删除!
git branch -D 分支名