鍍金池/ 教程/ Java/ 分支管理策略
操作標(biāo)簽
多人協(xié)作
解決沖突
Git 的誕生
工作區(qū)和暫存區(qū)
搭建 Git 服務(wù)器
Bug 分支
配置別名
從遠(yuǎn)程庫(kù)克隆
分支
添加遠(yuǎn)程庫(kù)
分支管理策略
撤銷(xiāo)修改
安裝 Git
管理修改
生成 SSH key
GitHub
倉(cāng)庫(kù)狀態(tài)
忽略特殊文件
刪除文件
Feature 分支
創(chuàng)建與合并分支
創(chuàng)建版本庫(kù)
創(chuàng)建標(biāo)簽
版本回退
集中式 vs 分布式

分支管理策略

通常,合并分支時(shí),如果可能,Git 會(huì)用 Fast forward 模式,但這種模式下,刪除分支后,會(huì)丟掉分支信息。

如果要強(qiáng)制禁用 Fast forward 模式,Git 就會(huì)在 merge 時(shí)生成一個(gè)新的 commit,這樣,從分支歷史上就可以看出分支信息。

下面我們實(shí)戰(zhàn)一下--no-ff方式的git merge

首先,仍然創(chuàng)建并切換 dev 分支:

$ git checkout -b dev
Switched to a new branch 'dev'

修改 readme.txt 文件,并提交一個(gè)新的 commit:

$ git add readme.txt 
$ git commit -m "add merge"
[dev 6224937] add merge
 1 file changed, 1 insertion(+)

現(xiàn)在,我們切換回 master:

$ git checkout master
Switched to branch 'master'

準(zhǔn)備合并 dev 分支,請(qǐng)注意--no-ff參數(shù),表示禁用 Fast forward:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

因?yàn)楸敬魏喜⒁獎(jiǎng)?chuàng)建一個(gè)新的 commit,所以加上-m參數(shù),把 commit 描述寫(xiě)進(jìn)去。

合并后,我們用git log看看分支歷史:

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
...

可以看到,不使用 Fast forward 模式,merge 后就像這樣:

http://wiki.jikexueyuan.com/project/git-tutorial/images/branch8.png" alt="" />

http://wiki.jikexueyuan.com/project/git-tutorial/images/merge-with-no-ff.gif" alt="" />

分支策略

在實(shí)際開(kāi)發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:

首先,master 分支應(yīng)該是非常穩(wěn)定的,也就是僅用來(lái)發(fā)布新版本,平時(shí)不能在上面干活;

那在哪干活呢?干活都在 dev 分支上,也就是說(shuō),dev 分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如 1.0 版本發(fā)布時(shí),再把 dev 分支合并到 master 上,在 master 分支發(fā)布 1.0 版本;

你和你的小伙伴們每個(gè)人都在 dev 分支上干活,每個(gè)人都有自己的分支,時(shí)不時(shí)地往 dev 分支上合并就可以了。

所以,團(tuán)隊(duì)合作的分支看起來(lái)就像這樣:

http://wiki.jikexueyuan.com/project/git-tutorial/images/branch9.png" alt="" />

小結(jié)

Git 分支十分強(qiáng)大,在團(tuán)隊(duì)開(kāi)發(fā)中應(yīng)該充分應(yīng)用。

合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并,而 fast forward 合并就看不出來(lái)曾經(jīng)做過(guò)合并。

上一篇:解決沖突下一篇:配置別名