Git rebase和stash 的区别

这篇文章主要是想讲一讲在git 工作流过程中,如何将你的工作树,变成一条线,而不是线条错乱分开的。
一个优秀的Git 管理流程应该是职责清晰,条例清晰,网上也有很多的的介绍:
https://www.jianshu.com/p/bb980de96be6
https://www.oschina.net/translate/a-successful-git-branching-model

一、rebase、stash的基本用法
stash

它的意思就是,把当前你已经修改了的文件暂存到本地,把你的分支恢复到未修改状态。你可以无限存储,存储的顺序是倒序的,最后的提交排序在最顶端,通过list 来查看存储的列表。

stash相关命令
  • 存储当前修改:git stash save "message" 或者 git stash "message"
  • 查看存储列表:git stash list
  • 恢复存储的修改:git stash apply
  • 恢复指定的存储修改:git stash apply stash@{l} l 是指当前存储列表中的顺序 0,1,2,3...
  • 清空存储列表:git stash clear
  • 移除指定的存储修改:git stash drop stash@{l} l 是指当前存储列表中的顺序 0,1,2,3...
rebase

rebase 字面意思就是修改它的基础版本,使用rebase 命令的分支不要轻易使用push命令,也就是说两个分支master,branch1,branch1是基于master的最新提交创建的,现在master中 提交了commit1,而branch1 中也有修改需要提交,这个时候branch1,commit2修改到本地分支,然后使用rebase命令,这个时候branch1 做的事情是先把commit2存储在patch中,然后把master的最新提交commit1 合并过来,然后再讲存储在patch 中的commit2恢复到branch1分支中,这个时候有冲突就解决冲突,如果没有就可以提交commit,push 到branch1的远程分支,然后合并到master分支中。这里我们下不说为什么要这么做,我们先看看有哪些命令。

rebase相关命令
  • 合并分支内容:git rebase [branch]
  • 解决冲突后继续合并:git rebase --continue
  • 终止合并(还原到原有状态):git rebase --abort
二、如何将工作树变成一条线,而不是很多的分叉线,合并线。

在工作过程中,我们会创建很多的分支,用于不同的功能或者修改,这样就会有很多的合并merge,一般的情况下都是直接使用merge,然后有冲突解决冲突,然后提交,这些操作没有问题,所生成的工作树就会有很多的分叉、合并,对于这种情况,有没有更好的办法,使得我的工作树种不会有那么多分叉、合并,使它看起来就是一根线,答案可定是有的,接下来看一下这种常见情况:


基本merge工作流

可以看到这样直接操作就会产生两条线,branch的分叉线也在其中。接下来我们看一下 rebase或者stash 的区别。


执行rebase操作,或者 stash + merge命令

是不是觉得很神奇,只有一根线了。这里其实你可以看到,最根本的是commit4的指针指向问题,或者说它是基于什么地方开始修改的,如果变成了基于最新的内容进行修改的,那就会变成一根线了。这就是最根本的。
三、stash,rebase的区别
原理不一样
  • stash操作,只是把修改的内容保存起来,然后还需要执行merge操作,把master的最新提交合并到branch分支中,然后执行 stash apply,把暂存的修改内容恢复,这样就把commit4指向了最新的内容修改了。
  • rebase操作,是在branch分支中已经把修改内容提交到本地分支了,这个时候执行rebase操作,会先把修改的内容放入patch中,然后还原到未修改的状态,然后合并master的最新修改到branch中,然后再把patch中的内容恢复,同样的也是把commit4指向了最新的内容修改了。
时机不一样
  • stash操作,有修改的内容,还没有提交到本地分支,也没有提交到远程分支
  • rebase操作,有修改的内容,已经提交到本地分支,没有提交打远程分支
步骤不一样
  • stash操作,需要执行 stash + merge + apply
  • rebase操作,需要执行 commit+ rebase

注意:
1.stash 可以选择性恢复修改的内容。
2.rebase操作分支,只能commit到本地,不能push到远程分支,不然还是会出现两根线的。

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

推荐阅读更多精彩内容

  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,902评论 0 11
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,672评论 1 17
  • git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git b...
    猿万阅读 5,028评论 1 45
  • 1.铁棍山药红枣粥 2.小米蛋糕卷 3.煮农场土鸡蛋 4.凉拌凤凰岭石磨豆腐丝 5.炒农场手撕圆白菜 6.卤水排骨...
    四十四号厨房卢家伟阅读 173评论 0 0
  • 窗外天色暗沉,心中十分憋闷,仿佛有什么东西要冲出来,却被束缚住。不知道那是什么,可能是我的倔强,不甘,也可能是对自...
    人尹何阅读 196评论 0 0