git上传分支的原理_几张图让你彻底弄懂git工作流(二) ——git分支

上篇文章已经说了Git简史以及Git基础,那么这篇文章简单总结下Git分支

Git分支

为了理解 Git 分支的实现方式,我们需要回顾一下,

Git保存的不是文件差异或者变化量,而只是一系列文件快照.Git分支分支其实就是从某个提交对象往回看的历史文字描述

imageGit中的分支,本质上就是个指向master对象的可变指针,master为默认分支,每次提交都会向前移动多个分支指向提交数据的历史文字描述

imageGit创建一个新分支指针从而创建分支,创建testing命令git branch testingHEAD 指向当前所在的分支文字描述

imageGit因为保存一个名为HEAD的指针,它指向正在工作中本地分支指针

git branch仅是创建新分支,但不会自动切换分支中去(如图还在master上)HEAD 在你转换分支时指向新的分支文字描述

image运行git checkout testingHEAD就指向testing分支了每次提交后 HEAD 随着分支一起向前移动文字描述

image左图是又提交一次的结果,每次提交后HEAD随着分支一起向前移动

但master仍指向原来git checkout时所在的commit对象。再次执行git checkout masterHEAD才会指向master

Git—merge分支的合并 — merge #1文字描述

image1. #53是第一滴修补问题的分支

git chackout -b iss53 === git branch iss53+git checkout iss53

2.假如接到紧急任务,这时候就不必花费大力气来复原这些修改,执行git checkout master创建紧急修补分支git checkout -b hotfix

3.hotfix分支是从master分支所在点分化出来的

image1.测试成功后回到master把它合并起来,然后发布服务器,命令为git checkout master git merge hotfix 合并会出现“Fast forward”的提示

2.因为是master并入hotfix的直接上游,只需master指针右移动(顺着走)称为快进

3.合并之后,master 分支和 hotfix 分支指向同一位置分支的合并 — merge #2文字描述

image1.现在回来处理iss53,完成后合并回master,不同于hotfix,开发历史从早的地方开始分叉的

2.master->c4,git额外处理为找到共同祖先C2简单三方合并

image三方合并后的结果重新快照,并自动创建指向它的提交对象C6,可以看到C6有两个祖先

(git自动创建了一个包含了合并结果的提交对象,自己裁决哪个共同祖先才是最佳合并基础,这和 CVS及Subversion(1.5 以后的版本不同)

Git—rebase分支的合并 — rebase #1文字描述

image把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase(衍合)

如左图:分叉到两个不同分支,又各自提交了更新

image除了merge两个分支最新的公共祖先三方合并

另外就是C3的变化补丁在C4中重新打一遍->衍合

有了衍合可以把分支中提交的变化移到另一个分支重放一遍

(原理:回到共同祖先,根据当前分支(ex··)提交的对象C3,生成补丁然后以master最后提交的C4为新的出发点,逐个应用之前准备好的补丁文件,最后会生成一个新的合并提交对象(C3'),master成直接下游)

image回到master进行快进合并分支的合并 — rebase #2文字描述

image从一个特性分支里再分出一个特性分支的历史

服务器端代码添加功能创建server提C3C4->从C3增加client分支并提C8C9->回server提C10

image将特性分支上的另一个特性分支衍合到其他分支

一次软件发布中,我们决定先把客户端的修改并到主线中,而暂缓并入服务端软件的修改

git rebase --onto master server client

取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍

image快进 master 分支,使之包含 client 分支的变化

git checkout master

git merge client

image在 master 分支上衍合 server 分支

git rebase [主分支] [特性分支] 命令会先取出特性分支 server,然后在主分支 master 上重演

git rebase master server

image最终的提交历史

快进主干分支 master

git checkout master && git merge server

现在 client 和 server 分支的变化都已经集成到主干分支来了,可以删掉它们了

git branch -d client

git branch -d serverGit—rebase风险分支的合并 — rebase的风险文字描述把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象,就没问题。如果衍合那些已经公开的提交对象,并且已经有人基于这些提交对象开展了后续开发工作的话,就会出现叫人沮丧的麻烦

Git分支—远端同步git分支 — 和远端同步文字描述

image如左图箭头中命名所示即可与远端同步

作者:Li_小点

链接:https://www.jianshu.com/p/ca76937b174f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

firefox是什么浏览器_Selenium Firefox驱动程序:使用Firefox浏览器自动进行测试

根据statcounter统计,到2020年6月,Mozilla Firefox浏览器在全球浏览器市场中所占份额为4.25%,因此,对于每个Selenium测试用例,Mozilla Firefox浏览器都是不可避免的。 Mozilla开发人员推出了Geckodriver(也…

oracle 谭岚_Hibernate实现Oracle BLOB的数据读写(2)

这次采用的是EJB3的配置测试环境与前次一样:Hibernate3.6.7,Oracle 10g Express,JDK7,Win71,数据库脚本create table TUser (ID char(32) not null,name varchar(10char) not null,photo blob, --头像constraint PK_TU…

matlab绘制簇状图,用matplotlib自定义绘制柱形图

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsdf pd.read_excel("D:\我的文档\jupyter notebook.xlsx")dfsns.set(style "white", font_scale 1.2)# 解决中文乱码plt.rcParams[ "font.sans-serif"] "simhe…

hp打印机怎么连接电脑_打印机怎么连接电脑?安装打印机图文教程

怎么安装打印机?有用户买了打印机后却不懂该如何安装并且连接电脑,下面就给大家分享打印机的具体安装方法。本地打印机安装:1.先把随机配送光盘放进光驱,如电脑没有光驱的话,可以直接把文件拷到U盘,再放到电…

toad dba suite for oracle 12,Toad DBA Suite 和Toad Development Suite的区别

这两个版本都包括了Toad、Sql Optimizer、Data Modeler、Toad DataAnalysi、Konwledges等基本软件。DBA版又增加了Spotlight On Oracle单机版,Development版则增加了Benchmark for Oracle和Code Tester这两个软件。可以认为DBA版和开发版是不同的打包方式。(以上内容…

正泰eplan_【万泉河】给EPLAN初学者的建议:不用宏

首先声明,我不是EPLAN的高手,对画电气图的熟悉程度,远远不如我对PLC和WinCC的来的得心应手。但在这里,把我个人一点点经验推荐给大家。以避免新手在初学EPLAN的时候遭遇过多的挫折,从而一次次的由入门到放弃。这是我个…

git 查看自己秘钥_gitlab配置ssh密钥及简单使用

演示环境:当前系统Centos6.9,使用IP192.168.0.80修改gitlab仓库地址编辑gitlab.yml文件vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml将host: gitlab.example.com改成host: 192.168.0.80PS:当然你也可以把192.168.0.80改…

码工里开关灯为什么遮罩层在下面_装修公司为什么推荐无主灯设计?

此前的文章,我们曾多次提到无主灯设计,包括它的一些做法和注意事项,介绍过它高明的艺术手法。但是,我们从未讲解过无主灯设计的一些缺点和盲区,所以,也许笔者下面要讲的内容,将会颠覆你此前对无主灯设计的认识。无主灯设计客厅缺点一:挑空间(层高)一直以来,我们可能都认为,无主…

oracle导入 不是dba,IMP-00013只有DBA才能导入由其他DBA导出的文件

IMP-00013 只有 DBA 才能导入由其他 DBA 导出的文件--实例演示---system用户导出C:\Users\ZML>exp system/zml fileD:\zml.dmp log D:\zml.log tables (zml)Export: Release 11.2.0.1.0 - Production on 星期一 4月 21 21:39:12 2014Copyright (c) 1982, 2009, Oracle and…

oracle dbms_crypto,Oracle的dbms_obfuscation_toolkit加密解密数据

oracle从8i开始提供一个数据加密包:dbms_obfuscation_toolkit.利用这个包,我们可以对数据进行DES,Triple DES或者MD5加密. 本文就此讲解如何使用以及使用过程需要注意的问题.1. dbms_obfuscation_toolkit简介dbms_obfuscation_toolkit主要有一下几个存储过程:-DESGETKEY -- 产…

黑苹果系统坏了如何恢复_黑苹果macOS系统U盘版/恢复版基础安装教程

写在前面本文最后更新:2020年7月17日本文是一篇黑苹果安装基础教程,内容比较入门。安装黑苹果,相信谁都不敢说自己能100%解决所有问题。如果本文未能解决你的问题,请见谅。本文主要介绍两种安装方式:U盘安装&#xff0…

为什么安监控需要公网ip_媲美专线的视频监控组网,无须公网ip

众所周知,视频监控是安防系统的重要组成部分,各行各业必备,比如:超市、学校、公司、厂区等等随着社会的发展,利用网络传输搭建视频监控系统,已经成为了各行各业的普遍需求今天给大家带来,媲美专…

php中的file_upload,PHP文件上传(PHP file upload)

PHP文件上传(PHP file upload)我正在尝试使用php将文件上传到我的服务器,将它们保存到我的mysql数据库中,但我无法让它工作,这是我正在使用的脚本,我相信它与“$ _FILES有关“因为当我把它拿出来时”&& $ _FILES [userfil…

java 调用jira_java调用jira接口

http://www.cnblogs.com/starcrm/p/4837971.html首先通过jira的wsdl(http://localhost:8080/rpc/soap/jirasoapservice-v2?wsdl)生成要引入的类然后写客户端:package jiraTEST;import java.net.URI;import java.net.URISyntaxException;import java.util.ArrayList…

百度seo排名点击器app_百度SEO优化和百度竞价优缺点 - 百度整站排名

原出处:超级排名系统原文链接:百度SEO优化和百度竞价优缺点 - 超级排名系统SEO优化的优势:1、低价:在百度优化排名中,维持一年排名的成本可能只有一到两个月的竞价成本,这比竞价便宜得多,超级排…

html网页放大时文字不换行_WEB前端-html基础

一、介绍1、HTML概念HTML(Hypertext Mark-up Language)即超文本标记语言2.HTML特点HTML不需要编译,直接由浏览器执行HTML文件是一个文本文件HTML文件必须使用html或htm为文件名后缀HTML大小写不敏感,HTML与html一样3.HTML基础语法…

linux目录隐藏技术,Linux环境下的高级隐藏技术

摘要:本文深入分析了Linux环境下文件、进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术、修改内存映象直接对系统调用进行修改技术,通过虚拟文件系统proc隐藏特定进程的技术。隐藏技术在计算机系统安全中应用十分广泛…

python代替shell脚本_python的简洁是shell无法代替的

之前线上服务器分发配置都是用shell和expect脚本分发,脚本写了很长,上周换了ansible,现在自己用python写一个,就30行代码就可以实现需求,之前的shell写了快200行了,蛋疼,代码如下: f…

linux命令cp命令行参数,linux命令之cp命令参数及用法详解

cp (复制档案或目录)[rootlinux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[rootlinux ~]# cp [options] source1 source2 source3 …. directory参数:-a :相当于 -pdr 的意思;-d :若来源文件为连结文件的属性(link…

python电脑编程求圆的面积案例_学Python划重点七 网络编程(UPD Socket编程、上传文件实例、计算圆的面积实例)...

一、UPD Socket 编程 socket 对象中与UDP Socket 服务器编程有关的方法是bind() ,注意不需要listen() 和accept() , 这是因为UDP 通信不需要像TCP 一样监听端口,建立连接。 socket.recvfrom(buffsize) : 接收UDP Socket 数据&…