1. 程式人生 > >git flow 分支合併

git flow 分支合併

在工作場合實施Git的時候,有很多種工作流程可供選擇,此時反而會讓你手足無措。本文羅列了企業團隊最常用的一些Git工作流程,包括Centralized Workflow、Feature Branch Workflow、Gitflow Workflow、Forking Workflow。願以此文拋磚引玉。

在你開始閱讀之前,請記住:這些流程應被視作為指導方針,而非“鐵律”。我們只是想告訴你可能的做法。因此,如果有必要的話,你可以組合使用不同的流程。

(本文主要介紹Gitflow Workflow……)


Vincent Driessen曾經寫過一篇博文,題為“A successful Git branching model

”(一個成功的Git分支模型)。Gitflow工作流程就是從這篇文章裡來的。

Gitflow工作流程圍繞專案釋出定義了嚴格的分支模型。儘管它比Feature Branch Workflow更復雜一些,但它也為管理更大規模的專案提供了堅實的框架。

與Feature Branch Workflow比起來,Gitflow流程並沒有增加任何新的概念或命令。其特色在於,它為不同的分支分配了非常明確的角色,並且定義了使用場景和用法。除了用於功能開發的分支,它還使用獨立的分支進行釋出前的準備、記錄以及後期維護。當然,你還是能充分利用Feature Branch Workflow的好處:拉拽請求(Pull Request)、隔離的試驗以及更高效率的合作。

它是怎麼工作的?

Gitflow流程仍然使用一箇中央程式碼倉庫,它是所有開發者的資訊交流中心。跟其他的工作流程一樣,開發者在本地完成開發,然後再將分支程式碼推送到中央倉庫。唯一不同的是專案中分支的結構。

用於記錄歷史的分支

Gitflow使用兩個分支來記錄專案開發的歷史,而不是使用單一的master分支。在Gitflow流程中,master只是用於儲存官方的釋出歷史,而develop分支才是用於整合各種功能開發的分支。使用版本號為master上的所有提交打標籤(tag)也很方便。


事實上,Gitflow流程就是圍繞這兩個特點鮮明的分支展開的。

用於功能開發的分支

每一個新功能的開發都應該各自使用獨立的分支。為了備份或便於團隊之間的合作,這種分支也可以被推送到中央倉庫。但是,在建立新的功能開發分支時,父分支應該選擇develop(而不是master)。當功能開發完成時,改動的程式碼應該被合併(merge)到develop分支。功能開發永遠不應該直接牽扯到

master


注意:組合使用功能開發分支和develop分支的這種設計,其實完全就是Feature Branch Workflow的理念。然而,Gitflow流程並不止於此。且看下文分解。

用於釋出的分支


一旦develop分支積聚了足夠多的新功能(或者預定的釋出日期臨近了),你可以基於develop分支建立一個用於產品釋出的分支。這個分支的建立意味著一個釋出週期的開始,也意味著本次釋出不會再增加新的功能——在這個分支上只能修復bug,做一些文件工作或者跟釋出相關的任務。在一切準備就緒的時候,這個分支會被合併入master,並且用版本號打上標籤。另外,釋出分支上的改動還應該合併入develop分支——在釋出週期內,develop分支仍然在被使用(一些開發者會把其他功能整合到develop分支)。

使用專門的一個分支來為釋出做準備的好處是,在一個團隊忙於當前的釋出的同時,另一個團隊可以繼續為接下來的一次釋出開發新功能。這也有助於清晰表明開發的狀態,比如說,團隊在彙報狀態時可以輕鬆使用這樣的措辭,“這星期我們要為釋出4.0版本做準備。”從程式碼倉庫的結構上也能直接反映出來。常用的一些措辭還有:基於develop新建分支,合併入master;命名規則為:release-*或release/*

用於維護的分支

釋出後的維護工作或者緊急問題的快速修復也需要使用一個獨立的分支。這是唯一一種可以直接基於master建立的分支。一旦問題被修復了,所做的改動應該被合併入master和develop分支(或者用於當前釋出的分支)。在這之後,master上還要使用更新的版本號打好標籤。

這種為解決緊急問題專設的綠色通道,讓團隊不必打亂當前的工作流程,也不必等待下一次的產品釋出週期。你可以把用於維護的分支看成是依附於master的一種特別的釋出分支。

* 舉例說明 *

下面的例子將演示Gitflow流程如何被用來管理一次產品釋出。假設你已經建立好了一箇中央倉庫。

1.     建立develop分支

第一步是給預設的master配備一個develop分支。一種簡單的做法是:讓一個開發者在本地建立一個空的develop分支,然後把它推送到伺服器。

git branch develop
git push -u origin develop

develop分支將包含專案的所有歷史,而master會是一個縮減版本。現在,其他開發者應該克隆(clone)中央倉庫,並且為develop建立一個追蹤分支。

git clone ssh://[email protected]/path/to/repo.git
git checkout -b develop origin/develop

到現在,所有人都把包含有完整歷史的分支(develop)在本地配置好了。

2.     小馬和小明開始開發新功能

我們的故事從小馬和小明要分別開發新功能開始。他們倆各自建立了自己的分支。注意,他們在建立分支時,父分支不能選擇master,而要選擇develop。

git checkout -b some-feature develop

他們倆都在自己的功能開發分支上開展工作。通常就是這種Git三部曲:edit,stage,commit:

git status
git add <some-file>
git commit

3.     小馬把她的功能開發好了

在提交過幾次程式碼之後,小馬覺得她的功能做完了。如果她所在的團隊使用“拉拽請求”,此刻便是一個合適的時機——她可以提出一個將她所完成的功能合併入develop分支的請求。要不然,她可以自行將她的程式碼合併入本地的develop分支,然後再推送到中央倉庫,像這樣:

git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature

第一條命令確保了本地的develop分支擁有最新的程式碼——這一步必須在將功能程式碼合併之前做!注意新開發的功能程式碼永遠不能直接合併入master。必要時,還需要解決在程式碼合併過程中的衝突。

4.     小馬開始準備一次釋出

儘管小明還在忙著開發他的功能,小馬卻可以開始準備這個專案的第一次正式釋出了。類似於功能開發,她使用了一個新的分支來做產品釋出的準備工作。在這一步,釋出的版本號也最初確定下來。

git checkout -b release-0.1 develop

這個分支專門用於釋出前的準備,包括一些清理工作、全面的測試、文件的更新以及任何其他的準備工作。它與用於功能開發的分支相似,不同之處在於它是專為產品釋出服務的。

一旦小馬建立了這個分支並把它推向中央倉庫,這次產品釋出包含的功能也就固定下來了。任何還處於開發狀態的功能只能等待下一個釋出週期。

5.     小馬完成了釋出

一切準備就緒之後,小馬就要把釋出分支合併入master和develop分支,然後再將釋出分支刪除。注意,往develop分支的合併是很重要的,因為開發人員可能在釋出分支上修復了一些關鍵的問題,而這些修復對於正在開發中的新功能是有益的。再次提醒一下,如果小馬所在的團隊強調程式碼評審(Code Review),此時非常適合提出這樣的請求。

git checkout master
git merge release-0.1
git push
git checkout develop
git merge release-0.1
git push
git branch -d release-0.1

釋出分支扮演的角色是功能開發(develop)與官方釋出(master)之間的一個緩衝。無論什麼時候你把一些東西合併入master,你都應該隨即打上合適的標籤。

git tag -a 0.1 -m"Initial public release" master
git push --tags

Git支援鉤子(hook)的功能,也就是說,在程式碼倉庫裡某些特定的事件發生的時候,可以執行一些預定義的指令碼。因此,一種可行的做法是:在伺服器端配置一個鉤子,當你把master推送到中央倉庫或者推送標籤時,Git伺服器能為產品釋出進行一次自動的構建。

6.     使用者發現了一個bug


當一次釋出完成之後,小馬便回去與小明一起開發其他功能了。突然,某個使用者提出抱怨說當前釋出的產品裡有一個bug。為了解決這個問題,小馬(或者小明)基於master建立了一個用於維護的分支。她在這個分支上修復了那個bug,然後把改動的程式碼直接合併入master。

git checkout -b issue-#001 master
# Fix the bug
git checkout master
git merge issue-#001
git push

跟用於釋出的分支一樣,在維護分支上的改動也需要合併入develop分支,這一點是很重要的!因此,小馬務必不能忘了這一步。隨後,她就可以將維護分支刪除。

git checkout develop
git merge issue-#001
git push
git branch -d issue-#001

相關推薦

git flow 分支合併

在工作場合實施Git的時候,有很多種工作流程可供選擇,此時反而會讓你手足無措。本文羅列了企業團隊最常用的一些Git工作流程,包括Centralized Workflow、Feature Branch Workflow、Gitflow Workflow、Forking Wor

Git分支合併,刪除分支後--保留分支資訊方法

Git merge 是合併分支的命令,預設會使用 Fast Forward 模式,這種模式在刪除分支後,分支的資訊也被刪除。 那麼如果要禁止使用該模式,在使用git merge 的時候,就要帶上-m " 保留分支資訊" ,這樣從git log 獲取的分支歷史上就能看出來。 具體使用:

git flow分支開發管理模型

Git Flow 是什麼 Git Flow是構建在Git之上的一個組織軟體開發活動的模型,是在Git之上構建的一項軟體開發最佳實踐。Git Flow是一套使用Git進行原始碼管理時的一套行為規範和簡化部分Git操作的工具。 2010年5月,在一篇名為“一種成

Git Flow分支策略

就像程式碼需要程式碼規範一樣,程式碼管理同樣需要一個清晰的流程和規範 Vincent Driessen 同學為了解決這個問題提出了 A Successful Git Branching Model 下面是Git Flow的流程圖,與SVN分支策略相比,Git分支流程複雜了很多,除了要維護兩個長期

git分支合併分支的流走

      首先從這張圖開始我今天的git分支的行走情況:一般的git環境,一般包含master分支,dev開發分支,test測試分支,一般都是test通過的程式碼才能放到master中,所有我們的一般開發一個新的功能,都是從master中拉取程式碼,這個程式碼基本和線上的程

Git Flow 分支管理簡述

小問題 而不是 release win https roi add 修復 courier 概述 Git 是什麽 Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核

idea git的使用(四)git建立分支合併分支

      1. 為什麼要建立分支 git預設的主分支名字為master,一般團隊開發時,都不會在master主分支上修改程式碼,而是建立新分支,測試完畢後,在將分支的程式碼合併到master主分支上。 2.操作如下: 2.1 idea g

git分支之間部分檔案合併

兩分支部分合並 banch A 分支上有a、b 、c、… 檔案需要合併到 branch B 分支,檔案少且是多次提交的最終版本: 操作如下: 切換到B分支: git checkout B 合併檔案列表: git checkout A a b c … 到此合併成

GIT--------建立與合併分支

建立與合併分支 命令 檢視分支:git branch 建立分支: git branch <name> 切換分支: git checkout <name> 建立+切換分

git 分支合併

分支的新建與合併 現在讓我們來看一個簡單的分支與合併的例子,實際工作中大體也會用到這樣的工作流程: 開發某個網站。 為實現某個新的需求,建立一個分支。 在這個分支上開展工作。 假設此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補,那麼可以按照下面的方式處理:

mzy git學習,分支以及分支合併(四)

git 鼓勵大量使用分支:最後進行master和分支之間的合併 git branch git branch 檢視當前有多少分支,並且將當前在使用的分支用*標註出來。 [一定要注意git的分支有從屬概念,即:如果建立一個分支的話,這個分支就是當前分支的分支] git branc

Git(建立與合併分支)

在版本回退裡,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裡,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。 一開始的時候,maste

最想知道的git操作系列(4)--- git 分支合併

1、切換到要合併的基礎分支      git checkout master 2、檢視所有的分支(包括遠端)      git branch -a 3、將希望合併的分支進行合併      g

Git 建立與合併分支(4)

每次提交Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裡,這個分支叫主分支,即master分支。 HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。 1.建立分支 git

使用git建立與合併分支

一、概述 學會使用git命令對專案進行建立分支,並在建立結束後合併到主分支上。 問:為什麼要建立分支? 答:在原來的分支上建立一個自己的分支進行開發,在開發完畢後一次性合併到原先的分支,這樣既保證安全又不會影響其他人的開發。   二、步驟 命令操作 //檢視分支: git br

git切換分支合併程式碼

git切換分支,合併分支,合併程式碼 1、建立dev分支,第一句命令就已經建立並且切換到了dev分支,下面的兩個命令是分別是建立dev,切換到dev git checkout -b dev git branch dev git checkout dev 2、檢視所有的分支,帶有*部分

Git 本地分支與遠端分支的建立,刪除,推送,合併

檢視分支情況 git branch -a 建立本地分支dev git checktout -b dev 刪除本地分支dev git branch -d dev 如果有改動,強制刪除本地分支dev git branch -D dev 刪除遠端分支dev

git命令總結-提交push,分支合併pull,切換版本checkout

1. git提交命push git config --global user.name "git使用者名稱" git config --global user.email "git密碼" git add . git commit -m "提交內容介紹" git remo

Git --建立分支分支合併

git remote add 遠端git倉庫地址(以.git結尾) git checkout -b 分支名 --建立分支並切換到分支 git branch 分支名 --切換 git branch -d 分支名 --刪除分支 git add 放到臨時

git分支合併

一、分支合併到master 1.切換到master git checkout master 2.先拉取一下 git pull origin master 3.合併分支(加入我的分支名叫 hechaojie_branch) git merge hechaoji