Git Flow

1. 主要分支介紹

20180306141732512.png

1.1 master分支

1.2 develop分支

1.3 release分支

1.4 bugfix分支

1.5 feature分支

2. 新功能開發工作流

2.1 切換到本地倉庫工作區

2.2 從遠程倉庫克隆代碼到本地倉庫

2.3 基于master分支,創建develop分支

2.4 在本地倉庫的開發流程

2.5 推送代碼到遠程倉庫

2.6 將代碼發布到測試分支

2.7 測試工程師提交Bug后修復

2.8 測試工作完成后,合并代碼到develop分支

2.9 開發工作和測試工作都完畢后,發布時將develop分支合并到主線

2.10 階段開發完畢,打一個里程碑Tag包

3. 發布后的產品Bug修復工作流

3.1 獲取Bug產品的軟件發布版本號

3.2 查找里程碑Tag

3.3 基于里程碑Tag創建分支

3.4 修復代碼后可以查詢修改過的地方

3.5 修復完畢后分別合并到develop分支和master分支

3.6 創建新的里程碑Tag

3.7 刪除bugfix分支

4. 日常開發過程中常用操作

4.1 撤銷操作

4.1.1 提交后發現丟了幾個文件沒有提交

4.1.2 撤銷上一次的提交,但是保留暫存區和當前修改不變

4.1.3 撤銷上一次的提交和暫存區修改,僅保留當前修改不變

4.1.4 撤銷上一次的提交,并丟棄所有修改,包括暫存區和當前目錄中的修改,整體回檔到上上次的提交

4.1.5 撤銷暫存區和當前目錄下所有文件的修改,整體回檔到上一次提交

4.1.6 將文件提交到暫存區后撤回

4.1.7 撤銷對文件的修改

1. 主要分支介紹

工作流

1.1 master分支

主分支,產品的功能全部實現后,最終在master分支對外發布。

1.2 develop分支

開發分支,基于master分支克隆,產品的編碼工作在此分支進行。

1.3 release分支

測試分支,基于delevop分支克隆,產品編碼工作完成后,發布到本分支測試,測試過程中發現的小bug直接在本分支進行修復,修復完成后合并到develop分支。本分支屬于臨時分支,目的實現后可刪除分支。

1.4 bugfix分支

Bug修復分支,基于master分支或發布的里程碑Tag克隆,主要用于修復對外發布的分支,收到客戶的Bug反饋后,在此分支進行修復,修復完畢后分別合并到develop分支和master分支。本分支屬于臨時分支,目的實現后可刪除分支。

1.5 feature分支

功能特征分支,基于develop分支克隆,主要用于多人協助開發場景或探索性功能驗證場景,功能開發完畢后合并到develop分支。feature分支可創建多個,屬于臨時分支,目的實現后可刪除分支。

2. 新功能開發工作流


2.1 切換到本地倉庫工作區

cd /home/timerhunter/workspace

2.2 從遠程倉庫克隆代碼到本地倉庫

$git clone https://xxxx@localhost:8443/r/valve/V5-Lora.$git

2.3 基于master分支,創建develop分支

/* 切換到master分支 */
$git checkout master
/* 基于master分支克隆develop分支,并在克隆完畢后直接跳轉到develop分支 */
$git checkout -b develop
/* 推送develop分支到遠程倉庫 */
$git push origin develop

注:編碼工作主要在develop分支,master分支主要用來發布穩定版本

2.4 在本地倉庫的開發流程

完成一個功能點或者一天的工作結束時,將代碼提交到本地倉庫

/* 提交修改到緩沖區 */
$git add .
/* 提交修改到本地倉庫 */
/* 如果是修復的BUG,應該在修改說明的最開始添加Bug#ID,多個Bug用逗號分隔,例如Bug#002,003 */
/* 如果是完成了一個指派的任務,應該在修改說明的最開始添加Task#TaskID,例如Task#165 */
$git commit -m "Bug#123 修改說明"
/* 每完成一個功能點可以對代碼進行打包 */
$git tag -m "簡要說明增加/修復/刪除了什么功能" v0.0.0.170718

注:不是每一個Tag都需要提交到遠程倉庫,比如可以在完成一個功能點的編碼工作后未編譯就打一個包,僅存儲于本地倉庫,在編譯成功&測試通過后,再打一個新的Tag包(里程碑Tag包),僅將里程碑Tag包推送到遠程倉庫

2.5 推送代碼到遠程倉庫

當完成一個功能點或階段工作時,將代碼推送到遠程倉庫develop分支

/* 執行代碼拉取操作,防止代碼沖突 */
$git pull
/* 解決代碼沖突后,推送代碼到遠程倉庫*/
$git push origin develop

注:禁止將未編譯或編譯不通過的代碼提交到遠程倉庫,如果編碼工作進行未完成可以提交到本地倉庫中,等待該功能點全部實現后再將代碼推送到遠程倉庫中。

2.6 將代碼發布到測試分支

階段性的開發工作已完成,啟動小批量測試工作,將代碼發布到測試分支release

$git checkout develop
$git checkout -b release
$git push origin release

2.7 測試工程師提交Bug后修復

從遠程倉庫拉取代碼

/* 克隆倉庫 */
$git clone https://admin@192.168.1.88:8443/r/admin/test.$git
/* 查看遠程倉庫分支情況:克隆倉庫時只能克隆master分支,因此需要拉取指定分支,我們使用$git branch -r查看遠程分支情況 */
$git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
  origin/release
/* 拉取測試分支 */
$git checkout -b release origin/release

修復流程同#2.4,#2.5;
注意在$git commit時的修復說明中添加Bug#BugID關鍵字
完成一個Bug修復或完成階段性工作后,將代碼推送到遠程分支

2.8 測試工作完成后,合并代碼到develop分支

/* 切換到develop分支 */
$git checkout develop
/* 執行合并操作,將release分支代碼合并到develop分支 */
$git merge release
/* 如果合并報錯,則解決沖突,沖突解決后繼續再次執行合并 */

2.9 開發工作和測試工作都完畢后,發布時將develop分支合并到主線

$git checkout master
$git merge develop

2.10 階段開發完畢,打一個里程碑Tag包

/* 創建里程碑Tag */
$git tag -m "Task#003 v1.0.0 首版發布" v1.0.0.170718
/* 推送里程碑Tag到遠程倉庫 */
$git push origin v1.0.0.170718

3. 發布后的產品Bug修復工作流


3.1 獲取Bug產品的軟件發布版本號

3.2 查找里程碑Tag

/* 查詢里程碑及其提交說明 */
$git tag -n1 -l v*

3.3 基于里程碑Tag創建分支

 /* git checkout -b [創建的分支名稱] [里程碑Tag名稱] */
 $git checkout -b bugfix-v1.0.0.170718 v1.0.0.170718

3.4 修復代碼后可以查詢修改過的地方

 $git diff

3.5 修復完畢后分別合并到develop分支和master分支

/* 合并到develop */
$git checkout develop
$git merge hotfix-v1.0.0.170718
/* 提交到遠程倉庫develop分支 */
$git push origin develop
/* 合并到master:如果隨下一個版本再發布,可不用合并至master分支 */
$git checkout master
$git merge develop
/* 提交到遠程倉庫master分支 */
$git push origin master

3.6 創建新的里程碑Tag

$git tag -m "Bug#002 修復某某Bug" v1.0.1.170719
/* 推送到遠程倉庫 */
$git push origin v1.0.1.170719

3.7 刪除bugfix分支

/* 刪除本地分支-$git branch -d [本地分支名]*/
$git branch -d bugfix-v1.0.0.170718
/* 刪除遠程分支-$git push origin :[遠程分支名]*/
$git push origin :bugfix-v1.0.0.170718

4. 日常開發過程中常用操作


4.1 撤銷操作

4.1.1 提交后發現丟了幾個文件沒有提交

/* 正常提交 */
$git commit -m "發布v1.0"
/* 發現丟了修改記錄,重新添加 */
$git add CHANGELOG.md
/* 重新提交,仍以"發布v1.0的名義提交",最終只有一個提交*/
$git commit --amend

4.1.2 撤銷上一次的提交,但是保留暫存區和當前修改不變

/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --soft HEAD~

4.1.3 撤銷上一次的提交和暫存區修改,僅保留當前修改不變

/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --mixed HEAD~

4.1.4 撤銷上一次的提交,并丟棄所有修改,包括暫存區和當前目錄中的修改,整體回檔到上上次的提交

/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --hard HEAD~

4.1.5 撤銷暫存區和當前目錄下所有文件的修改,整體回檔到上一次提交

注意:此操作非常危險,會丟失所有修改,直接整體回檔到指定的版本,謹慎使用

/* 正常提交 */
$git commit -m "發布v1.0"
/* 修改多個文件 */
/* 添加到暫存區 */
git add .
/* 撤銷暫存區和本地目錄下所有文件的修改,并整體回檔到上一次提交的狀態 */
$git reset --hard HEAD
/* 可以修改HEAD為SHA-1值回檔到任意版本 */
/* 使用git log查看每次提交的SHA-1值,可以僅指定前7位 */
$git reset --hard 745d8cd

4.1.6 將文件提交到暫存區后撤回

在對文件執行git add操作后,重新撤回

/* 添加文件到暫存區 */
$git add README
/* 將文件從暫存區撤回 */
$git reset HEAD README

4.1.7 撤銷對文件的修改

在對文件進行修改后,發現思路不對,需要將文件恢復至原有狀態

/* 撤銷對CHANGELOG.md文件的修改,請注意這是一個危險的命令,
 * 對指定文件的修改都會被取消,會還原成上次提交的樣子 */
$git checkout -- CHANGELOG.md
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 實習第二周,花了兩天時間重新認識了git。重溫了一下git的基礎操作,真切的感受到了git的強大。由于之前并沒有系...
    某不科學的XX閱讀 1,115評論 0 0
  • 這是一種以發布為中心的開發模式。該模式以荷蘭程序員 Vincent Driessen 發表的 A successf...
    拙言_Coder閱讀 3,318評論 1 1
  • 引言 編寫的目的 -通過規范化的流程,使得產品、開發與測試等各個部門更高效的協同工作。-通過規范化的流程使得產品高...
    一憶閱讀 34,960評論 12 87
  • 昨夜突然高燒,哆哆嗦嗦一晚上,一大早被媽媽拉去醫院。現在發燒的病人來醫院都會直接去發熱門診,避免流行性感冒傳染別人...
    無尾熊自成長閱讀 642評論 6 3
  • 一路停停走走還是忘不了最初的夢。 很小很小時我都記不清了是什么時候的事,聽他們說有一天我們親戚聚會時有個長...
    未成熟的蘋果閱讀 217評論 0 0