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

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

git rebase是对commit history的改写。当你要改写的commit history还没有被提交到远程repo的时候,也就是说,还没有与他人共享之前,commit history是你私人所有的,那么想怎么改写都可以。

而一旦被提交到远程后,这时如果再改写history,那么势必和他人的history长的就不一样了。git push的时候,git会比较commit history,如果不一致,commit动作会被拒绝,唯一的办法就是带上-f参数,强制要求commit,这时git会以committer的history覆写远程repo,从而完成代码的提交。虽然代码提交上去了,但是这样可能会造成别人工作成果的丢失,所以使用-f参数要慎重。

要解决这个问题,就要从提交流程上做规范。

举个正确流程的栗子:

假设楼主的team中有两个developer:tom和jerry,他们共同使用一个远程repo,并各自clone到自己的机器上,为了简化描述,这里假设只有一个branch:master

这时tom机器的repo有两个branch

master, origin/master
而jerry的机器上也是有两个branch
master, origin/master

均如下图所示

tom和jerry分别各自开发自己的新feature,不断有新的commit提交到他们各自私有的commit history中,所以他们的master指针不断的向前推移,分别指向不同的commit。而又由于他们都没有git fetchgit push,所以他们的origin/master都维持不变。

jerry的repo如下

tom的repo如下,注意T1和上图的J1,分别是两个不同的commit

这时Tom首先把他的commit提交的远程repo中,那么他本机origin/master指针则会前进,和master指针保持一致,如下

远程repo如下

现在jerry也想把他的commit提交到远程repo上去,运行git push,毫无意外的失败了,所以他git fetch了一下,把远程repo,也就是之前tom提交的T1给拉到了他本机repo中,如下

commit history出现了分叉,要想把tom之前提交的内容包含到自己的工作中来,有一个方法就是git merge,它会自动生成一个commit,既包含tom的提交,也包含jerry的提交,这样就把两个分叉的commit重新又合并在一起。但是这个自动生成的commit会有两个parent,review代码的时候必须要比较两次,很不方便。

jerry为了保证commit history的线性,决定采用另外一种方法,就是git rebase。jerry的提交J1这时还没有被提交到远程repo上去,也就是他完全私有的一个commit,所以使用git rebase改写J1的history完全没有问题,改写之后,如下

注意J1被改写到T1后面了,变成了J1`

git push后,本机repo

而远程repo

异常的轻松,一条直线,没有-f

所以,在不用-f的前提下,想维持树的整洁,方法就是:在git push之前,先git fetch,再git rebase

git fetch origin mastergit rebase origin/mastergit push

强烈推荐阅读

 

转载于:https://www.cnblogs.com/vhua/p/git_1.html

你可能感兴趣的文章
多项式回归
查看>>
Python-字符串
查看>>
MySQL8.0安装以及介绍(二进制)
查看>>
MySQL权限系统
查看>>
Python-集合
查看>>
转:标签中的href如何调用js
查看>>
CrawlSpiders简介
查看>>
面向对象编程
查看>>
django-rest-framework 视图的使用规则 总结分享
查看>>
drf 访问文档出现错误'AutoSchema' object has no attribute 'get_link'
查看>>
django-rest-framwork 错误信息整理
查看>>
第一讲 评估类模型之层次分析法
查看>>
评估类模型之优劣解距离法Topsis模型
查看>>
MNIST 数据集介绍
查看>>
浅谈response和request方法
查看>>
浮点数的二进制表示
查看>>
leetcode 173-Binary Search Tree Iterator(medium)
查看>>
【移动开发】Android中WIFI开发总结(二)
查看>>
beyond compare 数据对比工具
查看>>
python3链接oracle
查看>>