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

git命令之git rebase 的用法相关推荐

  1. git命令及git合并分支进行多人协作

    git命令及git合并分支进行多人协作 git命令大全 git的工作区.暂存区.本地仓库和远程仓库 git常用命令 git revert 和 git reset的区别 修改默认分支 合并分支 Git分 ...

  2. git命令之git clone用法

    2015年02月26日 13:59:11 阅读数:81047 转:http://blog.csdn.net/wangjia55/article/details/8818845 在使用git来进行版本控 ...

  3. 10个你应该了解的Git命令(以及Git省时小窍门)

    在本文中,我们将讨论那些作为开发人员.数据科学家或产品经理应该知道的各种各样的Git命令.并且将使用Git查看.删除和整理.此外,我们还将介绍如何使用Bash别名和Git编辑器配置转义Vim和节省时间 ...

  4. Git命令:git常用命令

    Git 基本知识与常用指令 https://www.cnblogs.com/chiao/archive/2011/07/27/2117835.html 一.Git代码状态转换图 其中: 未被Git跟踪 ...

  5. Git 命令之Git clean

    开篇点题 git clean命令用来从你的工作目录中删除所有没有tracked过的文件 git clean -n  不会删除,只是Notification,提醒      2. git clean - ...

  6. 【Git命令】Git常用命令速查 Git命令汇总

    记录Git的一些常用指令,遗忘时方便快速查询. 符号说明: []里表示可选字段 <>里表示需要用户定义的字段 1. 基础配置 配置用户签名: # 配置用户名 git config [--g ...

  7. git命令之git tag 给当前分支打标签

    git tag - 标签相关操作 发表于 2011年06月29日 由 机器猫 标签可以针对某一时间点的版本做标记,常用于版本发布. 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 ...

  8. git命令之git mergetool vi非正常退出.swp删除不了的问题

    1.git   pull命令产生无法merge的错误 使用了 git  mergetool命令然后...傻逼了 进入了vi操作界面,不会操作,非正常退出... 然后就产生了.swp相关文件,死活删除不 ...

  9. git 命令之 git commit --no-verify -m ‘XXX‘

    过往的开发中一多多少少会用一些可视化git提交工具,比如小乌龟,sourcetree,但是今天遇到了一个奇葩的问题,git的sourcetree代码提交不上去.解决方式如下 git commit -- ...

最新文章

  1. 3.2.4 控制图层显示的范围
  2. 我作为一个程序员,除了写程序还会干什么?什么都不会了!
  3. Ribbon-3使用配置文件自定义Ribbon Client
  4. 如何找到SAP support package名称
  5. WindowsAPI中PostMessage与SendMessage的区别
  6. 计算机多媒体设计徽章,酷毙了:Hackaday将会议徽章设计成一台可编程的电脑
  7. 不要在意七十亿分之一对另七十亿分之一的看法
  8. 为什么农产品电商不好做
  9. vs 2017 建立 php,WIN10系统下OSG+VS2017或者vs2019环境搭建
  10. Spring定时器corn表达式详解
  11. Atitit it法学论 uke协会it刑法attilax总结 目录 1. 法学plus 1 1.1. 替换表 1 2. 第一章 刑法概说 1 2.1. 财产 1 3. Line 65: 第四章 犯
  12. Word-去掉标题前面的小黑点
  13. SAP中物料采购PO和SA共存情况下的标准价格确定
  14. 新手入坑杭电百题2000-2099
  15. 【教程】CRX格式插件不能离线安装?本地扩展CRX无法安装怎么办?
  16. 骞云数据库DBaaS解决方案深度解析
  17. SpringBoot+SpringSecurity+JWT整合实现单点登录SSO史上最全详解
  18. android单元测试教程,Android单元测试-Junit
  19. js 获取系统时间
  20. 从区块技术的发展历史看区块链是什么?

热门文章

  1. opencv python 基于分水岭算法的图像分割
  2. 转--大话session
  3. Linux 内核漏洞可用于逃逸 Kubernetes 容器
  4. 投资大鳄摩根士丹利成Accellion FTA 服务器被黑事件的又一个受害者
  5. Google的Flutter工具允许开发者开发跨平台应用
  6. 吴恩达创建deeplearning.ai讲授AI课程 ,向全世界普及深度学习知识
  7. sccm2012 客户端推送安装故障解决一例
  8. SpringMVC+Thymeleaf如何处理URL中的动态查询参数
  9. unity, Invoke延迟执行
  10. Nginx+Keepalived主备配置