分支策略
在實(shí)際開發(fā)中以清,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
首先,master分支應(yīng)該是非常穩(wěn)定的崎逃,也就是僅用來發(fā)布新版本掷倔,平時(shí)不能在上面干活;
那在哪干活呢个绍?干活都在dev分支上勒葱,也就是說,dev分支是不穩(wěn)定的障贸,到某個(gè)時(shí)候错森,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上篮洁,在master分支發(fā)布1.0版本;
你和你的小伙伴們每個(gè)人都在dev分支上干活殃姓,每個(gè)人都有自己的分支袁波,時(shí)不時(shí)地往dev分支上合并就可以了。
所以蜗侈,團(tuán)隊(duì)合作的分支看起來就像這樣:
分支推送策略
但是篷牌,并不是一定要把本地分支往遠(yuǎn)程推送,那么踏幻,哪些分支需要推送枷颊,哪些不需要呢?
- master分支是主分支,因此要時(shí)刻與遠(yuǎn)程同步夭苗;
- dev分支是開發(fā)分支信卡,團(tuán)隊(duì)所有成員都需要在上面工作,所以也需要與遠(yuǎn)程同步题造;
- bug分支只用于在本地修復(fù)bug傍菇,就沒必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個(gè)bug界赔;
- feature分支是否推到遠(yuǎn)程丢习,取決于你是否和你的小伙伴合作在上面開發(fā)。
總之淮悼,就是在Git中咐低,分支完全可以在本地自己藏著玩,是否推送袜腥,視你的心情而定渊鞋!
合并分支歷史信息遺留問題
通常,合并分支時(shí)瞧挤,如果可能锡宋,Git會(huì)用Fast forward模式,但這種模式下特恬,刪除分支后执俩,會(huì)丟掉分支信息。
如果要強(qiáng)制禁用Fast forward模式癌刽,Git就會(huì)在merge時(shí)生成一個(gè)新的commit役首,這樣,從分支歷史上就可以看出分支信息显拜。
如果要保留需要在合并時(shí)加上--no-ff參數(shù)
git merge命令用于合并指定分支到當(dāng)前分支(意思在合并前需要切換到主分支)
如衡奥,
git merge dev (普通合并)
git merge --no-ff -m "merge with no-ff" dev (保留分支信息合并)
查看分支詳細(xì)情況命令
git log --graph --pretty=oneline --abbrev-commit
沖突解決:
Git用<<<<<<<,=======远荠,>>>>>>>標(biāo)記出不同分支的內(nèi)容矮固,我們修改如下后保存:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
需要解決沖突然后保存
多人協(xié)作的工作模式通常是這樣:
- 首先,可以試圖用git push origin branch-name推送自己的修改譬淳;
- 如果推送失敗档址,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并邻梆;
- 如果合并有沖突守伸,則解決沖突,并在本地提交浦妄;
- 沒有沖突或者解決掉沖突后尼摹,再用git push origin branch-name推送就能成功见芹!
如果git pull提示“no tracking information”,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建蠢涝,用命令git branch --set-upstream branch-name origin/branch-name玄呛。
這就是多人協(xié)作的工作模式,一旦熟悉了惠赫,就非常簡(jiǎn)單把鉴。
按本管理
發(fā)布一個(gè)版本時(shí),我們通常先在版本庫(kù)中打一個(gè)標(biāo)簽儿咱,這樣庭砍,就唯一確定了打標(biāo)簽時(shí)刻的版本。將來無論什么時(shí)候混埠,取某個(gè)標(biāo)簽的版本怠缸,就是把那個(gè)打標(biāo)簽的時(shí)刻的歷史版本取出來。所以钳宪,標(biāo)簽也是版本庫(kù)的一個(gè)快照揭北。
Git的標(biāo)簽雖然是版本庫(kù)的快照,但其實(shí)它就是指向某個(gè)commit的指針(跟分支很像對(duì)不對(duì)吏颖?但是分支可以移動(dòng)搔体,標(biāo)簽不能移動(dòng)),所以半醉,創(chuàng)建和刪除標(biāo)簽都是瞬間完成的疚俱。