Pro Git 学习笔记 (十, rebase, 草稿)

rebase和merge的目的都是为了合并分支.

  • merge是这样的:
git merge experiment # 当前所在分支是master
Pro Git 学习笔记 (十, rebase, 草稿)_第1张图片
basic-rebase-1.png

Pro Git 学习笔记 (十, rebase, 草稿)_第2张图片
basic-rebase-2.png
  • rebase是这样的:
$ git checkout experiment
$ git rebase master # 当前所在分支是experiment,修改的也是experiment,也就是c4的指向从c2指向了c3
First, rewinding head to replay your work on top of it...
Applying: added staged command
Pro Git 学习笔记 (十, rebase, 草稿)_第3张图片
basic-rebase-3.png
$ git checkout master
$ git merge experiment
Pro Git 学习笔记 (十, rebase, 草稿)_第4张图片
basic-rebase-4.png

一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁——例如向某个其他人维护的项目贡献代码时。
在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master 上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。(master和我自己是并行开发的,通过rebase可以使其看起来像串行的)

另一个例子

Pro Git 学习笔记 (十, rebase, 草稿)_第5张图片
interesting-rebase-1.png
$ git rebase --onto master server client
# 取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍(如果没有 onto等,也就是和前文的操作方式一样,会导致,rebase的祖先找错(C3),但实际上我们想找的共同祖先是C2)
Pro Git 学习笔记 (十, rebase, 草稿)_第6张图片
interesting-rebase-2.png
$ git checkout master
$ git merge client
Pro Git 学习笔记 (十, rebase, 草稿)_第7张图片
interesting-rebase-3.png
$ git rebase master server
Pro Git 学习笔记 (十, rebase, 草稿)_第8张图片
interesting-rebase-4.png
git rebase --continue #解决冲突的,不需要commit

你可能感兴趣的:(Pro Git 学习笔记 (十, rebase, 草稿))