创建与合并分支

https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

真是太神奇了,你看得出来有些提交是通过分支完成的吗?

下面开始实战。

首先,我们创建dev分支,然后切换到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
* devmaster

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:

Creating a new branch is quick.

然后提交:

$ git add readme.txt
$ git commit -m "branch test"
[dev b17d20e] branch test1 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-forwardreadme.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命令来切换分支:

创建并切换到新的dev分支,可以使用:

$ git switch -c dev

直接切换到已有的master分支,可以使用:

$ git switch master

使用新的git switch命令,比git checkout要更容易理解。

小结

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

git branch分支切换和合并相关推荐

  1. git branch分支创建、切换、合并,git tag标签

    一)Git分支简介 每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作. 列出分支命令:git branch 创建分支命令:git bra ...

  2. Git分支 查看branch 创建 切换checkout 合并merge(先切回主分支) 删除branch -d 推送push

    Git分支 分支的概念 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN.如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时 ...

  3. git创建、切换、合并、删除分支

    创建分支 git branch 分支名 git log --decorate --oneline显示 切换分支 git checkout 分支名 合并分支 git merge 分支名 关于合并冲突问题 ...

  4. git branch 分支

    Git自学之路(四)- git branch 分支 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个 ...

  5. git branch 分支命令图文详解

    git branch 分支命令详解 git branch (查看本地分支) git branch -r (查看远程分支) git branch -a (查看所有分支) git branch < ...

  6. git查看分支 -切换分支

    1.查看当前分支 git branch -a 2.查看本地分支 git branch 3.切换分支到test git checkout test 4.克隆项目 git clone 项目地址

  7. git branch 分支 按照时间排序

    git branch 分支 按照时间排序 当 git 分支越搞越多的时候,我们往往只想关注最近修改过的分支,所以一个很大的需求是根据最近修改 (commit) 的时间来排序和显示分支branch 目前 ...

  8. 【git与github交互之主分支和次分支切换、合并等】

    文章目录 git与github交互分支切换 1. 单个账号分支创建合并测试 2. 作为项目管理者在gihub页面端对成员提交代码审核并合并 3. 多人协作开发逻辑流程 git与github交互分支切换 ...

  9. 使用git命令——分支切换

    git一般有很多分支,我们clone到本地的时候一般都是master分支,那么如何切换到其他分支呢? 有些IDE可以使用git插件轻松自如的切换,比如idea,webstorm,... 喜欢使用git ...

最新文章

  1. 参加UI培训就业多长时间
  2. 你说你学不动啦,看 Redux 作者怎么说?
  3. 获取异常信息e.printStackTrace()的内容
  4. Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)
  5. 团队章程---促进团队更合作和更高效
  6. sql server总结二
  7. 9行代码AC——L1-022 奇偶分家(10 分)(~解题报告~)
  8. python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题
  9. Windows 10 装Ubuntu 搞定了
  10. “U盘杀手”出现新变种 提醒用户小心谨防
  11. 什么是浏览器指纹识别
  12. [玩转UE4/UE5动画系统>技能系统(GAS)篇] 二 技能 Gameplay Ability(GA)
  13. 二级C语言office公共基础知识点
  14. ZF与MMSE接收检测
  15. Linux-脚本安装、快照、重置虚拟机
  16. PS技巧---提取线稿
  17. 软件测试学习书籍推荐【乐搏TestPRO】
  18. 从键盘输入圆柱体的半径和高,求圆柱体的表面积和体积
  19. 微信小程序开发自学笔记 —— 九、微信开发者工具
  20. “熊猫烧香”病毒简介及特征

热门文章

  1. 小程序:rpx与px混合计算
  2. 十三、中介者模式与解释器模式详解
  3. 目标跟踪 中 precision plot图 与 success Plot图 的具体含义及代码实现
  4. vue路由跳转传参的几种方式
  5. 近50年数据库技术发展史
  6. 【Java设计模式系列】装饰器模式(Decorator Pattern)
  7. YUYV422 转 YUV420 代码
  8. 计算机网络 | NAT | 什么是NAT | 网络地址转换
  9. 2021年低压电工考试题库及低压电工模拟试题
  10. 解决android模拟器无法上网问题,模拟器无法上网解决方法