簡介
工具Git-flow是按照Vincent Driessen的branch 模型,實現的一個高層次(級別)的git倉庫操作擴展集合。
在git-flow中,一切被劃分爲分支。 當你開始一個新特性的時候,你會基於develop分離出一個新的分支。 如果你在進行hotfix, 那麼你是從master上分離的.
使用git-flow模型,在於明白每個分支是從哪個分支分離出來,最終應該合併到哪些分支去。
Mac中安裝
使用Homebrew安裝
brew install git-flow
使用MacPorts安裝
port install git-flow
wget
wget --no-check-certificate -q -O - https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | sudo bash
- curl
curl -L -O https://raw.github.com/nvie/gitflow/develop/contrib/gitflow-installer.sh
sudo bash gitflow-installer.sh
Git Flow工作流程圖
Git Flow常用的分支
Production 分支
也就是我們經常使用的Master分支,這個分支最近發佈到生產環境的代碼,最近發佈的Release, 這個分支只能從其他分支合併,不能在這個分支直接修改Develop 分支
這個分支是我們是我們的主開發分支,包含所有要發佈到下一個Release的代碼,這個主要合併與其他分支,比如Feature分支Feature 分支
這個分支主要是用來開發一個新的功能,一旦開發完成,我們合併回Develop分支進入下一個ReleaseRelease分支
當你需要一個發佈一個新Release的時候,我們基於Develop分支創建一個Release分支,完成Release後,我們合併到Master和Develop分支Hotfix分支
當我們在Production發現新的Bug時候,我們需要創建一個Hotfix, 完成Hotfix後,我們合併回Master和Develop分支,所以Hotfix的改動會進入下一個Release
各分支詳解
Master 分支
所有在Master分支上的Commit應該Tag
Feature 分支
Feature分支做完後,必須合併回Develop分支, 合併完分支後一般會刪點這個Feature分支,但是我們也可以保留
Release 分支
Release分支基於Develop分支創建,打完Release分之後,我們可以在這個Release分支上測試,修改Bug等。同時,其它開發人員可以基於開發新的Feature (記住:一旦打了Release分支之後不要從Develop分支上合併新的改動到Release分支)
發佈Release分支時,合併Release到Master和Develop, 同時在Master分支上打個Tag記住Release版本號,然後可以刪除Release分支了。
維護分支 Hotfix
hotfix分支基於Master分支創建,開發完後需要合併回Master和Develop分支,同時在Master上打一個tag
Git Flow代碼示例
- 創建develop分支
git branch develop
git push -u origin develop
- 開始新Feature開發
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature
# 做一些改動
git status
git add some-file
git commit
- 完成Feature
git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop
git branch -d some-feature
# If you pushed branch to origin:
git push origin --delete some-feature
- 開始Relase
git checkout -b release-0.1.0 develop
# Optional: Bump version number, commit
# Prepare release, commit
- 完成Release
git checkout master
git merge --no-ff release-0.1.0
git push
git checkout develop
git merge --no-ff release-0.1.0
git push
git branch -d release-0.1.0
# If you pushed branch to origin:
git push origin --delete release-0.1.0
git tag -a v0.1.0 master
git push --tags
- 開始Hotfix
git checkout -b hotfix-0.1.1 master
- 完成Hotfix
git checkout master
git merge --no-ff hotfix-0.1.1
git push
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
git branch -d hotfix-0.1.1
git tag -a v0.1.1 master
git push --tags
常用命令綜述
- 初始化: git flow init
- 開始新Feature: git flow feature start MYFEATURE
- Publish一個Feature(也就是push到遠程): git flow feature publish MYFEATURE
- 獲取Publish的Feature: git flow feature pull origin MYFEATURE
- 完成一個Feature: git flow feature finish MYFEATURE
- 開始一個Release: git flow release start RELEASE [BASE]
- Publish一個Release: git flow release publish RELEASE
- 發佈Release: git flow release finish RELEASE
- 別忘了git push –tags
- 開始一個Hotfix: git flow hotfix start VERSION [BASENAME]
- 發佈一個Hotfix: git flow hotfix finish VERSION