Git 分支管理

概述

Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理。git

我畫的git分支管理
圖片描述分佈式

Git的優點

Git有不少優勢。其中很顯著的一點,就是版本的分支(branch)和合並(merge)十分方便。有些傳統的版本管理軟件,分支操做實際上會生成一份現有代碼的物理拷貝,而Git只生成一個指向當前版本(又稱"快照")的指針,所以很是快捷易用。
快捷帶來的問題就是若是稍不注意分支就會太多,形成不方便管理。所以分支管理變的尤其重要。Vincent Driessen提出了一個分支管理的策略,用來給你們學習。它可使得版本庫的演進保持簡潔,主幹清晰,各個分支各司其職、層次分明。post

[說明:在一個團隊中,使用git來進行版本管理,高端大氣上檔次,不我不是表達這個。而是咱們的小夥伴在剛開始使用git時,對git分支不明確,不明確具體分支作什麼的,以及如何使用,下面具體實戰,有不對之處請指正!]學習

git分支模型參考

git分支模型

分支管理

下面內容參考上面的模型進行講解,但不是絕對的。測試

主分支Master

首先,中央倉庫應該有一個、且僅有一個主分支。全部提供到生產環境的正式版本。
Master 是Git默認的主分支。它是自動創建的,版本庫初始化之後,默認就是在主分支在進行開發。(master分支代碼最完整,最乾淨,用於生產環境)spa

開發分支Develop

主分支只用來發布重大版本,平常開發應該在另外一條分支上完成。咱們把開發用的分支叫作Develop。
這個分支能夠用來生成代碼的最新隔夜版本(nightly)。若是想正式對外發布,就在Master分支上,對Develop分支進行"合併"(merge)。
Git建立Develop分支並切換爲當前分支的命令:.net

git checkout -b develop

將Develop分支發佈到Master分支的命令:版本控制

# 切換到Master分支指針

git checkout master

# 對Develop分支進行合併code

git merge --no-ff develop

上一條命令的--no-ff參數是什麼意思。默認狀況下,Git執行"快進式合併"(fast-farward merge),會直接將Master分支指向Develop分支。
使用--no-ff參數後,會執行正常合併,在Master分支上生成一個新節點。爲了保證版本演進的清晰,咱們但願採用這種作法。

臨時性分支(輔助分支)

前面講到版本庫的兩條主要分支:Master和Develop。前者用於正式發佈,後者用於平常開發。其實,常設分支只須要這兩條就夠了,不須要其餘了。
可是,除了常設分支之外,還有一些輔助開發分支,用於應對一些特定目的的版本開發。臨時性分支主要有三種:

功能(feature)分支
預發佈(release)分支
修補bug(hotfix)分支

這三種分支都屬於臨時性須要,使用完之後,應該刪除(用完即焚),使得代碼庫的常設分支始終只有Master和Develop。
我應用時候通常回把fixbug分紅fix和bug,爲了方便的管理上線的時間節點,由於通常fix是指不修改會有錯誤,但錯誤不是致命的,能夠根據開發安排來選擇上線時間,而bug是對使用形成了影響,所以要實時上線。因此分紅兩個。

臨時分支

功能分支

feature是功能分支,它是爲了開發某種特定功能,從Develop分支上面分出來的。開發完成後,要再併入Develop,而且每一個功能都有一個對應的功能分支
功能分支的名字,能夠採用feature_xx的形式命名。如:咱們要開發一個oss文件上傳功能或者地圖的功能,就可使用到功能分支!如:feature_ossfileupload
建立一個功能分支:

# 切換到develp分支

git checkout develop

# 從develp分支切出分支feature_x
git checkout -b feature_x

開發完成後,將功能分支合併到develop分支

# 從當前分支切換到develop分支

git checkout develop

# 合併feature_xx

git merge --no-ff feature_xx

# 刪除feature_x分支

git branch -d feature_xx
發佈分支

release是發佈分支,它是指發佈正式版本以前(即合併到Master分支以前),咱們要對當前完成的功能進行測試。
預發佈分支是從Develop分支上面分出來的,預發佈結束之後,必須合併進Develop和Master分支。它的命名,採用release_xx的命名形式
建立一個預發佈分支

# 切換到develp分支

git checkout develop

# 從develp分支切出分支release_xx

git checkout -b release_1.2.1

確認沒有問題後,合併到master分支

git checkout master

 git merge --no-ff release_1.2.1

# 對合並生成的新節點,作一個標籤

git tag -a 1.2  -m 「1.2版本」

再合併到develop分支並刪除預發佈分支

git checkout develop
 git merge --no-ff release_1.2.1
 git branch -d release_1.2.1
hotfix分支

修補bug分支。軟件正式發佈之後,不免會出現bug。這時就須要建立一個分支,進行bug修補。
修補bug分支是從Master分支上面分出來的。修補結束之後,再合併進Master和Develop分支。它的命名,能夠採用fixbug_xx的形式。
建立一個修補bug分支

# 切換到 master 分支

git checkout master

# 建立bug分支

git checkout -b hotfix_0.1

修補結束後,合併到master分支

git checkout master
 git merge --no-ff hotfix_0.1
 git tag -a 0.1.1 -m "添加tag0.1.1"

合併到develop分支而後刪除bug分支

git checkout develop
 git merge --no-ff hotfix_0.1
 git branch -d hotfix_0.1

參考原文: A successful Git branching model
http://nvie.com/posts/a-successful-git-branching-model/
小福利 :git命令別名(部分)特別是在命令較長時經過別名能夠節省不少時間。在.gitconfig [alias]欄 中配置

co = checkout #切換分支
 cm = commit  #提交
 br = branch  #查看分支
 st = status  #查看狀態
 ad = add  # 添加新增或者修改的文件到git
 pl = pull  # 拉分支 更新操做
 ps = push  # 推分支
 bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d" #刪除已經合併到了當前分支的分支
 #log catch
 logp = log --graph --pretty=oneline --abbrev-commit
 sref = for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname:short) "%(subject)" [%(committername)]'
 # Complex aliases
 plog = log --graph --pretty='format:%C(red)%d%C(reset) %C(yellow)%h%C(reset) %ar %C(green)%aN%C(reset) %s'
 tlog = log --stat --since='1 Day Ago' --graph --pretty=oneline --abbrev-commit --date=relative
 lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
 rank = shortlog -sn --no-merges
 bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"

使用 如: git st 等於 git status

相關文章
相關標籤/搜索