本节主要总结分支的基本概念与本地库分支的基本使用,对于远程分支的使用在下一个部分进行总结。同时分支也是之前很多概念的基础。理解分支的概念也有助于后面更好的使用Git。

文章目录

  • 分支简介
    • Git保存数据的方式
  • 分支的基本使用
    • 创建分支
    • 分支的切换
    • 分支的新建与合并(案例)
      • 背景
      • 新建与切换分支
      • 合并分支
      • 删除分支
      • 继续工作
      • 分支的合并
      • 遇到冲突时的分支合并
        • 解决冲突
        • 解决提交
    • 分支管理
      • 如何查看已有分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

分支简介

首先明确Git数据的保存方式,他是一系列不同时刻的快照,然后Git保存一个提交对象的时候,该提交对象会保存一个指向暂存内容的快照的指针。该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象

Git保存数据的方式

我们假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件。暂存操作会为每一个文件计算校验和(使用我们在起步中提到的SHA-1哈希算法),然后会把当前版本的文件快照保存到Gt仓库中(Gt使用blob对象来保存它们),最终将校验和加入到暂存区域等待提交






Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。

分支的基本使用

创建分支

git branch <branchname>

HEAD 可以表示目前所在的分支

分支的切换

使用git checkout

分支的新建与合并(案例)

背景

新建与切换分支


创建一个分支同时切换到那个分支上。git checkout -b iss53
等同于

这时候你的 HEAD 指针指向了 iss53 分支。当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样。
可以说C2是一个版本了,现在需要开始新建一个分支来解决问题,于是创建一个iss53分支来解决问题。

iss53对问题进行了修改,现在突然说要修复一个紧急问题。 有了 Git 的帮助,你不必把这个紧急问题和 iss53 的修改混在一起, 你也不需要花大力气来还原关于 53# 问题的修改,然后再添加关于这个紧急问题的修改,最后将这个修改提交到线上分支。 你所要做的仅仅是切换回 master 分支。要留意你的工作目录和暂存区里那些还没有被提交的修改, 它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。

新建分支,解决问题。

合并分支

你可以运行你的测试,确保你的修改是正确的,然后将 hotfix 分支合并回你的 master 分支来部署到线上。你可以使用 git merge 命令来达到上述目的:切回master,然后git merge hotfix

删除分支

git branch -d hotfix

继续工作

切回issue5分支,继续解决issue53问题

分支的合并

假设你已经修正了 #53 问题,并且打算将你的工作合并入 master 分支。 为此,你需要合并 iss53 分到master 分支,这和之前你合并 hotfix 分支所做的工作差不多。你只需要检出到你想合并入的分支,然后运行git merge 命令:


合并完成后删除分支

遇到冲突时的分支合并

有时候合并操作不会如此顺利。如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git就没法干净的合并它们。如果你对#53问题的修改和有关hotfix分支的修改都涉及到同一个文件的同一处,在合并它们的时候就会产生合并冲突:

解决冲突

冲突就是你对一个文件进行了两种不同的修改,这是和就没办法进行合并,需要自己决定需要使用或者丢弃那个文件.

解决提交


分支管理

如何查看已有分支

git branch
git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表:

git branch -v
–merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。
如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged:

Git分支简介与使用——Git的学习与使用(五)相关推荐

  1. 4. git merge简介,以及git merge的参数–ff、–no-ff和–squash的区别?

    1.git merge原理 A---B---C topic/ \D---E-----F------H master 在master分支中使用git merge topic,只会将C和H中的文件进行比较 ...

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

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

  3. git分支(存在意义和使用方法)

    Git分支简介 Git分支是由指针管理起来的,所以创建.切换.合并.删除分支都非常快,非常适合大型项目的开发. 在分支上做开发,调试好了后再合并到主分支.那么每个人开发模块式都不会影响到别人. 分支使 ...

  4. Git分支的意义和使用方法

    今天上手了公司的一个项目由于是多人合作的,前后端数据算法的开发人员全部都在一个项目里,而且项目已经上线,进行功能迭代了,所以用到了git分支功能,下面来总结一下. 1.为什么要创建分支? 比如我们开发 ...

  5. Git分支:什么是分支,如何管理分支?

    一.前言 如果有人问你,当下最流行的"版本管理系统"(Version Control System)是什么,那你一定要毫不犹豫的告诉他,非Git莫属. Git 相比同类软件,Git ...

  6. 如何从旧提交创建新的Git分支? [重复]

    本文翻译自:How do I create a new Git branch from an old commit? [duplicate] Possible Duplicate / a more r ...

  7. git分支/标签操作

    git分支类似于某一个模块,等到所有模块开发完毕时,最后聚合在一起形成一个项目.而分支之间一般是不会受影响的. git 分支的基本操作: git branch branchname 表示创建分支,新建 ...

  8. Git分支及其协同开发

    Git协同开发 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLu ...

  9. Git(笔记三)---Git常用命令

    目录 目录 1. Git常用命令 1.1 环境配置 1.2 获取Git仓库 1.2.1在本地初始化一个Git仓库 1.2.2从远程仓库克隆 1.3工作目录.暂存区以及版本库概念 1.3.1 三者关系 ...

最新文章

  1. 1070 Mooncake
  2. NeHe教程Qt实现——lesson14
  3. JZOJ 5386. 【NOIP2017提高A组模拟9.23】碎
  4. 如何用c语言实现贪吃蛇登录界面,c语言贪吃蛇UI界面版.docx
  5. (更新)网络规划设计师考试大纲 及教程_下载
  6. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)
  7. cannon的英文名_Cannon[坎农]的中文翻译及英文名意思
  8. 计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...
  9. SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器
  10. 蜘蛛日志分析工具_如何分析蜘蛛日志?
  11. aspx使用存储过程分页
  12. 初始化参数之memory_target
  13. 【转】在Ubuntu 12.04 上为Virtualbox 启用USB 设备支持--不错
  14. .net中序列化读写xml方法的总结
  15. mysql+update+@value_记一次MySQL更新语句update的踩坑
  16. 微信小程序自定义组件(Toast)
  17. KendoUI和wijmoUI 它们的Grid比较 20120423
  18. erp和php数据对接,ERP系统与PLC数据对接方法
  19. 怎样发表期刊才能快速通过
  20. zookeeper之ZkClient使用,java电子书阅读器开发

热门文章

  1. 解决“‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件“的问题
  2. 解决新电脑的系统安装问题:针对BIOS的UEFI模式
  3. VScode输出中文乱码的解决方法------测试过可以用
  4. 如何在映像更改后升级docker容器
  5. 如何使用给定的部分名称杀死所有进程?
  6. 如何在Python中获取文件创建和修改日期/时间?
  7. Spring的Bean属性依赖注入
  8. java 变量 安全访问_访问java变量
  9. Git:常用的命令(不断迭代完善)
  10. kotlin 反射java类_Android Kotlin的Class、反射、泛型