git工作流(二) ——git分支

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

Git分支

为了理解 Git 分支的实现方式,我们需要回顾一下,
Git保存的不是文件差异或者变化量,而只是一系列文件快照.

  • Git分支
分支其实就是从某个提交对象往回看的历史 文字描述
image
Git中的分支,本质上就是个指向master对象的可变指针,master为默认分支,每次提交都会向前移动
多个分支指向提交数据的历史 文字描述
image
Git创建一个新分支指针从而创建分支,创建testing命令git branch testing
HEAD 指向当前所在的分支 文字描述
image
Git因为保存一个名为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 文字描述
image
1. #53是第一滴修补问题的分支
git chackout -b iss53 === git branch iss53+git checkout iss53
2.假如接到紧急任务,这时候就不必花费大力气来复原这些修改,执行git checkout master创建紧急修补分支git checkout -b hotfix
3.hotfix分支是从master分支所在点分化出来的
image
1.测试成功后回到master把它合并起来,然后发布服务器,命令为git checkout master git merge hotfix 合并会出现“Fast forward”的提示
2.因为是master并入hotfix的直接上游,只需master指针右移动(顺着走)称为快进
3.合并之后,master 分支和 hotfix 分支指向同一位置
分支的合并 — merge #2 文字描述
image
1.现在回来处理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 server

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


  • Git分支—远端同步
git分支 — 和远端同步 文字描述
image
如左图箭头中命名所示即可与远端同步



更多内容请查看《几张图让你彻底弄懂git工作流(三)——git深入》😊

文章出处:起底Git & Pro Git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,870评论 0 11
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,757评论 5 147
  • 目录 Git 笔记系列(一)—— Git简介 Git 笔记系列(二)—— Git工作流程 Git 笔记系列(三)—...
    吃蘑菇De大灰狼阅读 1,112评论 0 2
  • 修自他相换菩提心 亲眼目睹遭受病痛、饥渴等痛苦的众生,或者于自前观想有一个被痛苦所逼迫的众生,自己向外呼气时,观想...
    周小芳阅读 349评论 1 1
  • 我纵身 投入星辉斑斓中 黑暗的油腻 却将我吞噬 张开双臂 欲将春日拥入怀中 焦灼的尘埃 却湮没我的热血 我静耳聆听...
    墨白_z阅读 514评论 0 3