鍍金池/ 教程/ Java/ 變基
創(chuàng)建沖突
暫存更改
創(chuàng)建項(xiàng)目
Git 內(nèi)幕:.git 目錄
撤銷本地更改
移動(dòng)文件
移除 oops 標(biāo)簽
何為 Origin
再談結(jié)構(gòu)
撤銷暫存的更改
修正提交
別名
檢查狀態(tài)
給版本打標(biāo)簽
撤銷提交的更改
拉下共享的更改
變基
暫存與提交
合并
合并拉下的更改
更改而非文件
更改原始倉(cāng)庫(kù)
重置 master 分支
回顧克隆的倉(cāng)庫(kù)
變基 VS 合并
共享倉(cāng)庫(kù)
導(dǎo)航分支
重置 greet 分支
添加跟蹤的分支
獲得舊版本
克隆倉(cāng)庫(kù)
Git 內(nèi)幕:直接處理 Git 對(duì)象
再談設(shè)置
遠(yuǎn)程分支
從分支移除提交
合并回 master
查看分叉的分支
添加遠(yuǎn)程倉(cāng)庫(kù)
拉下更改
歷史
在 master 中更改
裸倉(cāng)庫(kù)
做更改
高級(jí)/將來(lái)的主題
推送更改
多個(gè)倉(cāng)庫(kù)
設(shè)置
提交更改
取得更改
托管你的 Git 倉(cāng)庫(kù)
創(chuàng)建分支
解決沖突

變基

目的

使用 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]

合并 VS 變基

變基的最終結(jié)果與合并很相似。greet 分支現(xiàn)在包含它的全部更改以及來(lái)自 master 分支中的所有更改。然而,提交樹(shù)卻十分不同。greet 分支的提交樹(shù)已被重寫(xiě),以致 master 分支成為了其提交歷史的一部分。這使提交鏈更加線性,且更易閱讀。

何時(shí)變基,何時(shí)合并?

不要使用變基……

如果是公開(kāi)且與其他人共享的分支,那么重寫(xiě)公開(kāi)的共享分支將會(huì)搞砸團(tuán)隊(duì)中的其他會(huì)員。

要是提交分支的精確歷史重要(因?yàn)樽兓鶎⒅貙?xiě)提交歷史)。

根據(jù)上述準(zhǔn)則,我會(huì)針對(duì)短期生命的本地分支使用變基,而對(duì)公開(kāi)倉(cāng)庫(kù)的分支使用合并。