目的
使用 rebase
命令代替 merge
命令。
好,我們回到了第一次合并前的時(shí)間點(diǎn),并且我們想要將 master 中的更改集成到 greet 分支。
這次我們將使用 rebase
命令代替 merge
命令來(lái)從 master 分支中引入更改。
$ git checkout greet
$ git rebase master
$ git hist
$ go greet
Switched to branch 'greet'
$
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added Greeter class
Applying: hello uses Greeter
Applying: updated Rakefile
$
$ git hist
* 2fae0b2 2013-04-13 | Updated Rakefile (HEAD, greet) [Jim Weirich]
* 1c23048 2013-04-13 | Hello uses Greeter [Jim Weirich]
* 62d7ce0 2013-04-13 | Added greeter class [Jim Weirich]
* b59a8c2 2013-04-13 | Added README (master) [Jim Weirich]
* 96ee164 2013-04-13 | Added a Rakefile. [Jim Weirich]
* 0f36766 2013-04-13 | Moved hello.rb to lib [Jim Weirich]
* eb30103 2013-04-13 | Add an author/email comment [Jim Weirich]
* 1f7ec5e 2013-04-13 | Added a comment (v1) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value (v1-beta) [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]
變基的最終結(jié)果與合并很相似。greet 分支現(xiàn)在包含它的全部更改以及來(lái)自 master 分支中的所有更改。然而,提交樹(shù)卻十分不同。greet 分支的提交樹(shù)已被重寫(xiě),以致 master 分支成為了其提交歷史的一部分。這使提交鏈更加線性,且更易閱讀。
不要使用變基……
如果是公開(kāi)且與其他人共享的分支,那么重寫(xiě)公開(kāi)的共享分支將會(huì)搞砸團(tuán)隊(duì)中的其他會(huì)員。
要是提交分支的精確歷史重要(因?yàn)樽兓鶎⒅貙?xiě)提交歷史)。
根據(jù)上述準(zhǔn)則,我會(huì)針對(duì)短期生命的本地分支使用變基,而對(duì)公開(kāi)倉(cāng)庫(kù)的分支使用合并。