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

最新文章

  1. 从零开始编写属于我的CMS:(一)前言
  2. 【干货】解密监控宝Docker监控实现原理
  3. spring Quartz 调度
  4. web工程常见部署方式总结
  5. poj1840 哈希
  6. ASP.NET MVC3 301永久重定向实现程序
  7. Delphi-LowerCase 函数
  8. 使用 NuGet 管理项目库
  9. 四轴飞行器1.6 emwin与ucgui的移植,汉字外挂字库移植和DEMO效果对比
  10. TM一句备注讲清楚TCP3次握手
  11. WPF 自定义图片按钮
  12. 用border或者div制作三角形等图形
  13. Java Socket 编程
  14. 数据分析与展示——Matplotlib基础绘图函数示例
  15. PHP的数据类型和魔术常量
  16. docker安装配置gitlab详细过程
  17. Java的 volatile关键字的底层实现原理
  18. Vue音乐项目笔记(五)
  19. Ioc容器beanDefinition-Spring 源码系列(1)
  20. RabbitMQ简单使用

热门文章

  1. WPF中viewmodel层怎样得到view层的TabControl控件对象?
  2. hdu4914 Linear recursive sequence
  3. Hardwood Species 分类: POJ 树 2015-08-05 16:24 2人阅读 评论(0) 收藏
  4. Number Sequence 分类: HDU 2015-06-19 20:54 10人阅读 评论(0) 收藏
  5. 实现LUT
  6. lua中奇葩用法
  7. Android开发之Theme、Style探索及源码浅析
  8. Infragistics 汉化
  9. 关于myeclipse中maven项目转换相关设置
  10. 有关Duilib的博客(持续更新)