关于git rebase和git merge

原创
2013/07/04 16:43
阅读数 1.5W
最近在研究git rebase和git merge的用法,发现其实也挺简单的。(T_T人家还研究了好久…
git merge 应该大家都比较熟悉,就是把branch merge进来;

git rebase 的意思其实也是蛮简单的,就是rebase嘛~也就是说把我这个branch的根基换一下的意思,有点像嫁接。
网上一直流传的三张图,很经典,但是最初却被我误解了:

before merge/rebase:

A <- B <- C    [master]
^
 \
  D <- E       [branch]

after git merge master:

A <- B <- C
^         ^
 \         \
  D <- E <- F

after git rebase master:

A <- B <- C <- D' <- E'

(A, B, C, D, E and F are commits)

其实,这里rebase的线性,是指在当前branch上是线性的,其中带'(撇号)的commit并没有被同步到master上,仍然在branch上。
下面的图更好一点:
D'--E' topic
             /
    A---B---C master


另外两个相关的命令是: git pull和 git pull --rebase。
这两个的区别在于前者是git fetch + git merge,后者是git fetch + git rebase。
推荐地址:
http://ruby-china.org/topics/112
https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html
http://stackoverflow.com/questions/804115/git-rebase-vs-git-merge

展开阅读全文
打赏
2
15 收藏
分享
加载中

引用来自“纳兰清风”的评论

rebase是求另一分支相对公共祖先文的文件补丁,再对当前分支打上这些文件补丁
说得好。 并且这样当请求公共祖先也打上这些补丁的时候,可以产生比较礼貌的pull request。
2015/11/17 08:43
回复
举报
mingkaidox博主

引用来自“纳兰清风”的评论

rebase是求另一分支相对公共祖先文的文件补丁,再对当前分支打上这些文件补丁

恩,其实也就是把这个分支砍下来嫁接到最新的那个commit点上。
2013/07/06 10:42
回复
举报
rebase是求另一分支相对公共祖先文的文件补丁,再对当前分支打上这些文件补丁
2013/07/06 08:33
回复
举报
1024
2013/07/04 21:59
回复
举报
更多评论
打赏
4 评论
15 收藏
2
分享
返回顶部
顶部