Git速成学习第三课:创建与合并分支
本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了。
这里写一下分支管理中的创建与合并。
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/
首先在版本提交的过程中,每一次提交,Git都会将他们传承一条时间线,这个时间线就是一个分支。
截止目前,我们只有一条时间线,在Git中,这个分支就叫做主分支master。HEAD严格意义来讲不是
指提交,而是指向master,master才是指向提交的。所以,HEAD指向的就是当前的分支。
一开始的时候,master分支就是一条线,Git用master指向最新的提交,再用HEAD指向master,就可以
确定当前的分支,以及当前分支的提交点:

每一次提交,master分支就会向前移动一步,这样,随着你不断提交,master分支的线越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master形同的提交,再把HEAD指向dev
就表示当前的分支在dev上:

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件没有任何变化!
但是从现在开始,对工作区的修改和提交就是针对dev分支了。比如新提交一次后,dev指针往前移动一步
而master不变:

假如我们在dev上的工作完成了,就可以把dev合并到master上。合并的方法也十分简单,就是将master指向dev的
当前提交,就完成了合并:

所以Git合并分支也很快!只需要修改指针,工作区内容也不变。
合并完成后,我们甚至可以删除dev分支。删除的分支就是把dev指针给删除掉,删掉后只剩下master分支:

Let's do it!
首先我们创建一个dev分支,然后再切换到分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后用git branch命令查看自己当前的分支:
$ git branch
* dev
master
git branch命令会列出所有的分支,当前分支前面会标出一个*符号
然后我们就可以在dev分支上正常提交,比如对readme.txt进行修改,
添加一行文本“Creating a new branch is quick”
然后提交:
$ git add readme.txt
$ git commit -m "branch test"
[dev b17d20e] branch test
1 file changed, 1 insertion(+)
现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'
切换回master后,在查看一个文件readme.txt。刚才添加的内容不见了。因为刚才的提交在dev的分支上,
而master分支此刻的提交点并没有改变。如图所示:

现在我们就把dev分支的工作成果合并到master分支上:
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到当前分支。合并后在查看readme.txt的内容,就可以看到,和dev分支的最新内容是完全一样的。
注意上面的Fast -forward信息,Git告诉我们 ,这次的合并是“快进合并”,也就是直接把master指向dev的当前提交,所以合并的速度非常快。
当然也不是每一次的提交都能Fast -forward,后面将会学习到其他的合并方式。
那么合并完后,就可以放心的删除dev分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e)
删除后,查看branch,就只剩master分支了:
$ git branch
* master
因为创建合并还有删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删除分支,这就和
直接在master上面工作的效果是一样的,但过程更加安全。
switch
我们注意到切换分支使用git checkout <branch>,而前面讲过的撤销修改则是git checkout -- <file>,
同一个命令,有两种作用,确实有些让人迷惑。
实际上,切换分支的这个动作,用switch更加科学。因此最新的git版本提供git switch命令来切换分支:
$ git switch -c dev
直接切换到已有的master分支,可以使用:
$ git switch master
使用新的git switch命令,比git checkout要更容易理解。
Summary
Git鼓励大量使用分支:
查看分支 git branch
创建分支 git branch <name>
切换分支 git checkout <name> or git switch <name>
创建+切换分支 git checkout -b <name> or git switch -c <name>
合并某分支到当前分支 git merge <name>
删除分支 git branch -d <name>
Git速成学习第三课:创建与合并分支的更多相关文章
- Git速成学习第六课:Bug分支
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但 ...
- Git速成学习第五课:分支管理策略
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...
- Git速成学习第四课:解决冲突
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我们继续练习,准备新的feature1分支. $ git checkout -b feature ...
- Git创建与合并分支,撤销修改
git回滚到指定版本并推送到远程分支(撤销已提交的修改,并已push) git reset --hard <commit ID号> git push -f git回滚到上一个版本并推送到远 ...
- Git速成学习第一课:创建版本库与版本回退
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我太困了0.0精神点再写...... /*我来啦!以后会陆续更新自己的学习笔记*/ Git是分布 ...
- Git速成学习第二课:管理修改与删除文件
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 管理修改 首先我们需要明确,为什么说Git管理的是修改而不是文件呢? 我们首先对于已有的read ...
- Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)
原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- 使用git创建与合并分支
一.概述 学会使用git命令对项目进行创建分支,并在创建结束后合并到主分支上. 问:为什么要创建分支? 答:在原来的分支上创建一个自己的分支进行开发,在开发完毕后一次性合并到原先的分支,这样既保证安全 ...
- GIT 分支管理:创建与合并分支、解决合并冲突
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...
随机推荐
- GC详解及Minor GC和Full GC触发条件
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
- 简单的JAVAWeb选课系统
该系统管理员可以添加和删除学生.教师,教师可以修改自己信息.添加课程.浏览自己课程,学生可以修改自己的信息.选课.浏览全部课程. 首先展示文件: 然后就是一次展示代码: Guanli包中代码: pac ...
- 本月周六周日LIST集合
最近项目中有用到本月所有的周六,周日,特此分享一下! 算法思路:写一个循环,条件为本月开始日期.本月截至日期,通过循环获取第一个周六,加一天就是周日,每增加六天就是下一个周六,依次类推,循环到月末 代 ...
- BZOJ 3887/Luogu P3119: [Usaco2015 Jan]Grass Cownoisseur (强连通分量+最长路)
分层建图,反向边建在两层之间,两层内部分别建正向边,tarjan缩点后,拓扑排序求一次1所在强连通分量和1+n所在强联通分量的最长路(长度定义为路径上的强联通分量内部点数和).然后由于1所在强连通分量 ...
- HTML元素常用属性整理
a标签 <!-- 去除下划线 --> a{ text-decoration:none; //去掉默认下滑线 color:#333; //设置默认颜色 } a:hover{ text-dec ...
- wangEditor实现ctrl+v粘贴word图片并上传
很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...
- 下载、配置全新的eclipse
1.https://www.eclipse.org/downloads/ 2.确保安装配置了JDK,打开eclipse-inst-win64.exe,让eclipse installer程序UPDAT ...
- Hdu5762
Hdu5762 题意: 你n个点,让你找两个数对,A,B和C,D,使得A和B的曼哈顿距离等于C和D的曼哈顿距离,问是否存在这样的对,A!=C且B!=D. 解法: 直接暴力判断,时间复杂度是 $ O(n ...
- Reconnect due to socket error java.nio.channels.ClosedChannelException
storm整合kafka后出现如下异常: 错误原因:有部分kafka服务器连接不上导致,检查一下是不是每个kafka都能连接到(有的kafka配置使用的是host,记得配置相同的环境) 造成异常代码段 ...
- Spring Security整合JWT,实现单点登录,So Easy~!
前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况 ...