总第95篇

接上篇,本篇文章将详细梳理Git系统分支相关的操作,包括分支的新建与合并、分支的管理及变基等。Git的分支模型非常轻量型,你可以非常方便地创建分支以及在不同的分支间切换。可以说,Git的分支模型是它的亮点之一,也是它从众多版本控制系统中脱颖而出的关键。

1.Git分支是什么

当我们在Git中进行提交时,Git会保存一个提交对象,此提交对象包含一个指向暂存内容快照的指针、提交相关的附注信息和指向它的父对象指针。对于首次提交的对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。

Git分支,本质上仅仅是指向提交对象的可变指针Git的默认分支名字是master,这是用git init命令时默认创建的,在你每次提交时,master分支都会自动向前移动。

当我们在项目的某个节点创建一个分支后,并不会将此节点对应的节点代码复制一份出来,只是将新分支指向此节点,这在很大程度上可以减少空间上的开销。

2.分支的创建与切换

  • 创建分支

创建分支非常简单,可以用命令git branch <branch-name>创建一个名为branch-name的分支。 创建一个新的分支,它只是在当前提交对象上创建一个可以移动的指针。

Git系统中,有一个名为HEAD的特殊指针,它总是指向当前所在的本地分支

注意,当我们创建一个新分支后,并不会自动切换到新分支中去,若要切换,需要我们手动执行相关命令。

可以用命令git log --oneline --decorate可以查看各个分支当前所指的对象。

  • 切换分支

要切换到一个已存在的分支,你可以使用命令git checkout <branch-name>,这样HEAD指针就指向branch-name分支了。

请注意,分支切换会改变你的工作目录中的文件。若切换到一个较旧的分支,你的工作目录会恢复到此分支最后一次提交的样子,如果Git不能干净利落地完成这个任务,它将禁止切换分支。

一般我们可以用一条命令实现创建新分支并切换过去:git checkout -b <new-branch-name>

3.分支的合并与冲突解决

  • 分支合并

分支合并时,可以用命令git merge <branch>将当前分支合并到branch分支上。

若在合并时,当前分支与目标分支是直接后继关系,那么合并操作没有分歧需要解决,这种合并只会简单地将指针向前推进,也称做”快进“。

当两个分支合并后,其中的一个临时分支就没用了,你应该删除。可以用命令git branch -d <branch>删除branch分支。

若在合并时,当前分支与目标分支不是直接后继关系,而是有共同的祖先时,Git会使用两个分支末端所指的快照以及这两个分支的共同祖先,做一个简单的三方合并。 这个三方合并结果是生成一个新的快照并且自动创建一个新的提交指向它,这是一次合并提交,它不止一个父提交。

  • 冲突解决

有时可能你在两个不同的分支中,对同一个文件的同一部分进行了不同的修改,此是Git就无法干净地合并它们,会产生合并冲突。在这种情况下,Git只做了合并,没有自动创建一个合并提交。Git会暂停下来,等待你去解决合并产生的冲突。

你可以在产生冲突后,用git status命令查看哪些文件产生了冲突,去解决掉冲突后,对冲突的每个文件执行git add命令,此时,Git会将这些原本冲突的文件标记为冲突已解决。 再手动执行一次git commit即可。

4.推送与跟踪分支

  • 推送

当你想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库上。本地的分支并不会自动与远程仓库同步,你必须显式地推送想要分享的分支。

比如,你和别人协同在名为dev分支上工作,你需要将自己的代码推送到远程,可用命令git push origin dev,此命令中Git 会自动将分支名字展开为:

refs/heads/dev:refs/heads/dev,即将本地的dev分支推送到远程的dev分支。

根据这种原理,你也可以用这种方式推送:

git push origin <local-branch>:<remote-branch>

  • 跟踪分支

从一个远程分支检出一个本地分支会自动创建跟踪分支。若在一个跟踪分支上输入git pullGit会自动识别去哪个服务器上抓取、合并到哪个分支。

当克隆一个仓库时,它通常会自动创建一个跟踪origin/mastermaster分支,你也可以设置跟踪其它的分支,可以用如下命令来跟踪dev分支:

git checkout --track origin/dev

可以用如下命令来修改跟踪的远程分支

git branch -u origin/suapp 修改为跟踪suapp分支。

可以用如下命令来查看所有跟踪分支的设置情况:

git branch -vv

  • 拉取

git fetch命令只会从服务器上抓取本地没有的数据,它不会修改工作目录中的内容,合并需要你自己手动来完成。

git pull在大多数情况下的含义是一个git fetch命令紧跟着一个git merge命令。

  • 删除远程分支

对于服务器上无用的分支可以运行如下命令删除。

git push origin --delete example 删除example分支。

对于百分之九十的应用场景,上面几篇文章的内容已经完全够用了,当你遇到其它非常特殊的情况,可以 查阅文档

本文到此结束!

如果对你有帮助,请随手 点个赞点喜欢

=======================================================

欢迎【关注作者、私信作者】。我们一起交流一起进步。

=======================================================

【04】进阶:Git系统中的分支操作与管理相关推荐

  1. Git实战:branch分支操作详解

    什么是分支 分支是指在主干道上分支的支线,可以前往不同的地方,也可以到达相同的终点(只是实现的路线不同).Git指向团队开发中的个体,各开发者可以有自己的分支,开发时不会影响其他分支的开发进度.分支完 ...

  2. Git 企业中常用分支管理策略

    Git 企业中常用分支管理策略 一般企业中开发一个项目的分支策略 主分支 master 开发分支 develop 功能分支 feature 预发布分支 release bug 分支 fixbug 其它 ...

  3. 组群的基本概念linux,linux课件-Linux系统中组群与用户管理.ppt

    <linux课件-Linux系统中组群与用户管理.ppt>由会员分享,可在线阅读,更多相关<linux课件-Linux系统中组群与用户管理.ppt(66页珍藏版)>请在装配图网 ...

  4. 在请求分页虚存管理系统中_请求分页式系统中,以页为单位管理用户的虚空间,以段为单位管理内存空间_学小易找答案...

    [简答题]OS作为接口,通过哪几种方式实现? [简答题]并发与并行有什么区别? [判断题]请求分页式系统中,以页为单位管理用户的虚空间,以段为单位管理内存空间 [简答题]微内核是否是完整的OS? [单 ...

  5. linux分区变为空闲,分析linux系统中磁盘空闲空间的管理方法

    分析linux系统中磁盘空闲空间的管理方法 汪建国 摘要:要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块.如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存 ...

  6. git常用命令,分支操作,子模块

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) 二. Git 常用 ...

  7. Git之常见的分支操作

    目录 分支管理 1.创建与合并分支 1.2switch 2.解决冲突 3.分支管理策略 4.分支策略 5.Bug分支 6.Feature分支 7.多人协作 8.推送分支 9.抓取分支 10.Rebas ...

  8. 使用git拉取项目分支操作

    注:本文讲解以下面内容为参考案例 git地址:git@10.100.1.15:rd/frms-mgr-ebank.git 分支:3rd_bank/fubonbank 1.在本地创建一个文件夹 2.在本 ...

  9. git 怎么备份本地分支_同步管理本地git仓库和github仓库上的分支

    参考文章 分支管理策略 在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活 那在哪里干活呢?干活都在 dev分支上 ...

最新文章

  1. 简明python教程 --C++程序员的视角(九):函数式编程、特殊类方法、测试及其他...
  2. 【转载】如果你身边有程序员的朋友,请善待他们
  3. 三种方法实现CSS三栏布局
  4. mysql怎么防止误操作_MySQL数据库防止人为误操作的实例讲解
  5. 调用父级方法_通信:找到任意组件实例的findComponents系列方法,5个终极方案
  6. cocos2d js调用java_【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法...
  7. 《江湖X:汉家江湖》两万人在线服务器架构
  8. java xml 合并_Java中合并XML文档的设计与实现
  9. caffe安装_目标检测之caffe-ssd模型训练与测试
  10. 第三十三期:对于人工智能的恐惧及其5个解决方法
  11. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster
  12. Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表
  13. Linux日志被删处理方法
  14. 学习英语,先记下留着后用
  15. matlab插值函数的作用,matlab 插值函数
  16. c语言发生错误文件无效或损坏,VC2010编译时提示:转换到 COFF 期间失败: 文件无效或损坏...
  17. 保研面试常考题总结(自用 不断更新)
  18. 想要快速、免费的翻译外文PDF文档?Get翻译神器
  19. 单片机c语言sfr数据读,单片机c语言的sbit和sfr.docx
  20. 太阳能光伏发电和路灯应用系统的详细计算

热门文章

  1. React中设置样式
  2. Python使用for循环等腰三角形
  3. Android 手机debug调试
  4. python getopt模块
  5. database disk image is malformed解决方法
  6. Latex 把图片1跨两栏放到论文开头的一种方法
  7. java有序数组找中位数_有序数组中找中位数
  8. CarCol 老照片上色
  9. Matlab学习心得
  10. Apache配置文件httpd.conf的理解