变基过程:
两个分支
先考虑不用变基的合并:
$ git checkout master
$ git merge experiment
合并后:
如果变基:(以下为变基过程)
$ git checkout experiment
$ git rebase master
conflict resolve
$ git rebase --continue
然后再合并:
$ git checkout master
$ git merge experiment
一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁——例如向某个别人维护的项目贡献代码时。 在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master
上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。
上述变基过程的另一种方式:
$ git rebase master experiment confict resolve $ git rebase --continue $ git checkout master $ git merge experiment
这样省去先切换到experiment分支的过程。即便在另一个不相关的分支,也无须去先切换到experiment分支。( git rebase [basebranch] [topicbranch] )
git rebase --onto:
假设你希望将 client
中的修改合并到主分支并发布,但暂时并不想合并 server
中的修改,因为它们还需要经过更全面的测试。 这时,你就可以使用 git rebase
命令的 --onto
选项,选中在 client
分支里但不在 server
分支里的修改(即 C8
和 C9
),将它们在 master
分支上重演:
$ git rebase --onto master server client
conflict resolve
$ git rebase --continue
以上命令的意思是:“取出 client
分支,找出处于 client
分支和 server
分支的共同祖先之后的修改,然后把它们在 master
分支上重演一遍”。
然后,合并:
$ git checkout master
$ git merge client
git pull --rebase:
$ git pull --rebase
等价于:
$ git fetch
$ git rebase origin/master