git分支管理與使用規(guī)范

git分支管理與使用規(guī)范

分支管理

flow

  • git flow
  • github flow
  • gitlab flow
  • fn flow

分支與開發(fā)定義

主要分支

  • master

    線上分支, 一直存在

  • develop

    常規(guī)開發(fā)分支, 一直存在

  • masterfix

    線上bug修改分支, 一直存在

輔助分支

  • feature/*

    功能開發(fā)分支, 從develop分支而來, 然后合并入develop, 最終刪除.

  • release/*

    上線分支, 從develop分支而來, 然后合并入master, 并應(yīng)用到develop, 最終刪除.

  • hotfix/*

    線上bug修改分支, 從masterfix分支而來, 然后合并入masterfix, 最終刪除.

如何使用各種分支

init

一個項目初始有master分支, 需要新建立一個develop分支和masterfix分支.

git br -b develop 
git push origin develop

git br -b masterfix
git push origin masterfix

feature

常規(guī)功能開發(fā)需要從develop分支checkout出feature分支.

git checkout -b feature/GET-1008-添加用戶查詢列表 [develop]

開發(fā)完畢后合并回develop分支

git checkout develop
git pull // 先更新develop
git merge feature/GET-1008-添加用戶查詢列表 --no-ff
git push origin develop

git branch -d feature/GET-1008-添加用戶查詢列表

Release

開發(fā)完畢, 準備發(fā)布:

git checkout -b release/1.0.0 [develop]

然后在發(fā)布分支上處理一些發(fā)布操作, 比如更改版本號, 上線前測試, 問題修改等等. 當(dāng)分支可以進行上線發(fā)布后:

git checkout master
git merge release/1.0.0 --no-ff 
git tag -a 1.0.0

至此release完成, 但是需要將在release分支上的修改應(yīng)用到develop上.

git checkout develop
git merge release/1.0.0 --no-ff

git branch -d release/1.0.0

然后, 我們可以激活masterfix分支, 同步一下已經(jīng)上線的master分支, 為修改將要出現(xiàn)的線上bug做準備

git checkout masterfix
git merge master // 在正常情況下, 這里一定是fast-faward

hotfix

當(dāng)出現(xiàn)bug時, 我們需要從master或者是masterfix分支上分出hotfix分支來修改bug.

git checkout -b hotfix/修改空指針 masterfix

修改完畢后

git checkout masterfix
git merge hotfix/修改空指針 --no-ff

期間可以進行多次hotfix, 最后當(dāng)masterfix測試后沒有問題, 準備上線:

git checkout master
git merge masterfix --no-ff

在master上打下當(dāng)前上線的tag

git tag -a 1.0.1

同樣, 這些修改要應(yīng)用到develop分支上

git checkout develop
git merge masterfix --no-ff

分支與環(huán)境對應(yīng)?

  • master -- online
  • release -- off
  • develop -- ci
  • masterfix -- online-bug-fix
  • feature -- local, dev

總結(jié)

使用規(guī)范

鼓勵開分支

鼓勵本地開分支開發(fā), 獨立功能獨立分支.

將分支上提交合并

分支上開發(fā)的commit建議合并為一個commit, 這樣易讀, 方便主分支管理.

一種最簡單直接的方法

git reset [分支開始處]
git commit -m "..."

另一種方法, 在feature分支上執(zhí)行

git rebase -i develop // 將feature分支的修改應(yīng)用到develop上

// 后續(xù)操作
http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

保留分支信息

在不同分支合并時使用 --no-ff 參數(shù)生成merge commit

commit e562022b423f7bf29f77927dea4d13cb05230681
Merge: d88f815 799b7f8
Author: 楊曉辰 <yangxiaochen@yangxiaochendemacbook-pro.local>
Date:   Tue May 31 17:10:41 2016 +0800

    Merge branch 'feature/welcome' into develop

commit 799b7f87b99d5f5c49acf2edd8a6a363ff44f29f
Author: 楊曉辰 <yangxiaochen@yangxiaochendemacbook-pro.local>
Date:   Tue May 31 17:10:11 2016 +0800

    也修改auth

commit 18e7893f1583559003f7a4bb41fd03b937b3ed42
Author: 楊曉辰 <yangxiaochen@yangxiaochendemacbook-pro.local>
Date:   Tue May 31 17:08:04 2016 +0800

    修改 auth

減少以及消除無意義的分支內(nèi)merge

同一分支更新時要避免產(chǎn)生無意義的merge

如果是一個人使用git-flow, 你會發(fā)現(xiàn)你所有的commit以及commit log都是有意義的. 你所有的更改, feature合并都是有明確記錄的.

但是在多人使用下, 大家各自在本地開發(fā), 往develop分支上merge, 那么就會出現(xiàn)每個人的develop分支不一致. 那么當(dāng)一個人把自己的develop分支push到遠端時, 其他人pull的時候就會出現(xiàn)分支合并, 產(chǎn)生 "Merge branch 'develop' of remote into develop" 的類似commit.

很多時候, 合并時沒有沖突, 自動完成. 這種merge產(chǎn)生的commit是沒有意義的, 而且會讓分支看起來混亂.

按照以下規(guī)則可以減少甚至消除這種無意義的commit:

  1. 本地在往develop分支進行合并時, ** 先在develop上執(zhí)行g(shù)it pull **, 當(dāng)你沒有在本地對develop分支有commit時, 執(zhí)行git pull是會發(fā)生Fast-forward合并的, 這種默認并不產(chǎn)生commit.
  2. 將feature合并到develop上.
  3. push develop. 將你的修改提交到遠端.

多數(shù)時候, 如果多個人分開執(zhí)行以上操作, 是不會有問題的.

如果多個人同時進行以上操作, 那么在進行第三步的時候, 是push不上去的, 需要先pull, 那么又會產(chǎn)生所謂的無意義commit, 該怎么辦呢:

這時不要用git pull來拉取更改, 改為使用:

git pull --rebase

這個命令會將遠端代develop拉下來, 然后從本地develop上跟遠端develop分叉的地方開始, 將本地的commit一個個應(yīng)用到遠端develop的末端, 使之成為一條直線, 從而沒有了merge commit.

關(guān)于沖突, rebase的時候也會有沖突:

比如遠端 a->b->c

你的 a->b->d

進行rebase之后 a->b->c->e, 其中e的更改內(nèi)容和log就是你的d, 如果有沖突, 沖突的修改也是提現(xiàn)在e

沖突提交

修改完沖突, 我們會進行commit提交沖突修改. 不要使用git commit -m, 請直接使用git commit, git會識別你這是一個沖突提交.

常用操作

回滾
git reset --hard [version] // 丟棄版本后的所有修改
git reset [version] // 保留版本后的所有已提交修改
git reset --soft [version] // 保留版本后的所有已提交修改到commit stage

補充提交

git commit --amend

提交tag到服務(wù)器

git push origin --tags

日志與diff

sourcetree // 軟件

參考

http://nvie.com/posts/a-successful-git-branching-model/

Git 工作流程

合并commit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扎阶,一起剝皮案震驚了整個濱河市擎值,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沪斟,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件获枝,死亡現(xiàn)場離奇詭異锹杈,居然都是意外死亡,警方通過查閱死者的電腦和手機肆氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底瓣,“玉大人做院,你說我怎么就攤上這事”舫郑” “怎么了键耕?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柑营。 經(jīng)常有香客問我屈雄,道長,這世上最難降的妖魔是什么官套? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任酒奶,我火速辦了婚禮,結(jié)果婚禮上奶赔,老公的妹妹穿的比我還像新娘惋嚎。我一直安慰自己,他們只是感情好站刑,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布另伍。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摆尝。 梳的紋絲不亂的頭發(fā)上温艇,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音堕汞,去河邊找鬼勺爱。 笑死,一個胖子當(dāng)著我的面吹牛讯检,可吹牛的內(nèi)容都是我干的琐鲁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼人灼,長吁一口氣:“原來是場噩夢啊……” “哼围段!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挡毅,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒜撮,失蹤者是張志新(化名)和其女友劉穎暴构,沒想到半個月后跪呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡取逾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年耗绿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾隅。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡误阻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晴埂,到底是詐尸還是另有隱情究反,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布儒洛,位于F島的核電站精耐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏琅锻。R本人自食惡果不足惜卦停,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恼蓬。 院中可真熱鬧惊完,春花似錦、人聲如沸处硬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荷辕。三九已至本股,卻和暖如春攀痊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拄显。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工苟径, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躬审。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓棘街,卻偏偏與公主長得像,于是被迫代替她去往敵國和親承边。 傳聞我的和親對象是個殘疾皇子遭殉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 多種多樣的工作流使得在項目中實施Git時變得難以選擇。這份教程提供了一個出發(fā)點博助,調(diào)查企業(yè)團隊最常見的Git工作流险污。...
    JSErik閱讀 4,403評論 2 8
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,663評論 4 54
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,478評論 1 26
  • 媽媽出嫁后富岳,在居委會的大姨為媽媽找到一處公租房蛔糯。公租房在馬山窖,門前有一條內(nèi)河窖式,以前河水清澈是附近居民的生活用水蚁飒,...
    mimi播報閱讀 346評論 2 6
  • 這兩年的年過的不算好。惱人的親戚們毫無疑問占了大多數(shù)原因萝喘,但更重要的其實是自己仍舊沒有資本面對他們的顯擺淮逻。 本科比...
    燃fancier閱讀 252評論 0 3