Git rebase

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

现在我们在这个分支做一些修改,然后生成两个提交(commit).

$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

$ git checkout mywork
$ git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort

gitcast:c7-rebase

from: http://gitbook.liuhui998.com/4_2.html

git rebase教程相关推荐

  1. Git Rebase教程: 用Git Rebase让时光倒流

    想象一下你正在开发一个激进的新功能.这将是很灿烂的但它需要一段时间.您这几天也许是几个星期一直在做这个. 你的功能分支已经超前master有6个提交了.你是一个优秀的开发人员并做了有意义的语义提交.但 ...

  2. git Rebase 变基 教程

    在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突.即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功. 每次合并再push后,分支变成了这样: $ git l ...

  3. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 1 配置命令:git config --global * 2 版本库初始化:git init 3 向版本库添加文件:git ad ...

  4. git rebase -i 修改提交

    教程3 改写提交! 6. 用rebase -i 修改提交 为了节省时间,这个教程使用现有的历史记录作为本地数据库. 从这里下载 我们进入stepup-tutorial/tutorial6目录.本地端的 ...

  5. git rebase -i 汇合提交

    教程3 改写提交! 5. 用rebase -i 汇合提交 为了节省时间,这个教程使用现有的历史记录作为本地数据库. 从这里下载 我们进入stepup-tutorial/tutorial5目录.本地端的 ...

  6. 痞子衡嵌入式:第一本Git命令教程(0)- 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家讲的是Git命令汇编,共12篇文章,循序渐进地介绍Git操作的完整过程. 在开始Git课程之前,需要先跟大家普及2个重要概念(四度空间.四种状 ...

  7. 史上最全Git学习教程

    Git是世界上最先进的分布式版本控制系统,没有之一. -- Git爱好者 Git 是一个「分布式版本管理工具」,其具备太多的优点:更方便的 Merge.更方便的管理.更健壮的系统.对网络的依赖性更低. ...

  8. git cherry-pick branch 与 git rebase branch 的区别

    背景: 一直以为 git cherry-pick <branchname> 与 git rebase <branchname>是一样效果.今天在使用 cherry-pick & ...

  9. 【git 整理提交】git rebase -i 命令详解

    git rebase -i 详解 官方文档 变基时可用的命令 变基时有六个命令可用: pick pick只是意味着包括提交.重新进行命令时,重新安排pick命令的顺序会更改提交的顺序.如果选择不包括提 ...

最新文章

  1. lua创建文件和文件夹
  2. Spring是怎样诞生的?
  3. php企业站数据表,php – 创建一个站点来查询表的数据库
  4. WIN2003下×××服务器架设攻略
  5. android listview 异步加载问题
  6. python listbox排序_python – 从tkinter.Listbox中提取项目列表
  7. C语言解析http请求表单内容
  8. 高性能服务器机柜,TS系列网络服务器机柜
  9. 信息学奥赛一本通(1400:统计单词数)
  10. Agile Web Application Development with Yii 1.1 and PHP5
  11. 前端获取小程序二维码参数_微信小程序实现带参分享并消息卡片获取参数
  12. My97DatePicker 演示和文档
  13. 专家观点:Docker 架构优缺点大剖析
  14. 僵尸网络--botnet--DDoS 章2
  15. Android Studio 学生课程签到系统
  16. YOLOv5的详细使用教程,以及使用yolov5训练自己的数据集
  17. windows连接linux共享文件夹,windows访问linux共享文件夹
  18. 解决多线程编程中大并发数等待唤醒的问题
  19. 2014年中国行地产排行
  20. 战略管理学习---第2章 战略目标

热门文章

  1. 【大数据】大数据思维的十大核心原理
  2. 深度解析两种信用评估模型
  3. 一分钟理解softmax函数(超简单)
  4. browsersync php,用browserSync吞下4个php
  5. 消费者行为模型_市场调查消费者行为研究模型
  6. android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书
  7. 使用Docker Compose安装mysql
  8. Halcon算子知识:optical_flow_mg
  9. 深入理解ROS技术 【3】ROS下的模块详解(129-180)
  10. cubemx lan8720a ping不通_肩颈不通百病生,这5个开肩动作要多练