博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git rebase
阅读量:5891 次
发布时间:2019-06-19

本文共 950 字,大约阅读时间需要 3 分钟。

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

$ git checkout -b mywork origin
img_70500d745868858470e22053d5132672.png

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

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

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

img_eeaec999cbc58b651594b2e4f238a751.png
在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并;
结果看起来就像一个新的"合并的提交"(merge commit):
img_5871f046f7bf8ad18691dbb74870636e.png
但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 :

$ git checkout mywork$ git rebase origin

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

img_a3b0ef19c51b487e351e034f61059acc.png
当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 )
img_763edbf685d40792684636e885c5951b.png
现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:
img_ae08935c84e4d505dd5e6f82a9d1dbc0.png
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

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

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

$ git rebase --abort

转载地址:http://vwbsx.baihongyu.com/

你可能感兴趣的文章
如何写出一个无返回值,可接受lambda表达式参数的方法。
查看>>
mysql 清除数据库数据
查看>>
HDU 4741 Save Labman No.004 (几何)
查看>>
java中的Static class
查看>>
自动备份数据库并发送附件至邮箱
查看>>
【转载】Hadoop mapreduce 实现原理
查看>>
java布局学习(新)
查看>>
MyBatis框架(6)动态sql
查看>>
IOS 数字键盘添加“完成”按钮
查看>>
事件的那些事
查看>>
程序员零起步(三)——求职面试
查看>>
事务拼接
查看>>
mysql中Access denied for user 'root'@'localhost' (using password:YES)
查看>>
删除重复节点
查看>>
.net请求Webservice简单实现天气预报功能
查看>>
Loj #3056. 「HNOI2019」多边形
查看>>
【3】数据库的表设计和初始化
查看>>
Django rest framework的基本用法
查看>>
正则表达式匹配非需要匹配的字符串(标题自己都绕晕了)
查看>>
沙盒目录介绍
查看>>