常规的Git管理流程
一、前言
Git是目前流行的版本管理工具,大家應(yīng)該都使用過(guò)。雖然Git能為我們的項(xiàng)目管理提供極大的幫助,但是如果使用不當(dāng)也會(huì)造成一些不必要的麻煩,特別是在多人協(xié)作的情況下。本文將講述我們?cè)陧?xiàng)目開(kāi)發(fā)中使用的常規(guī)Git管理流程。
歡迎大家關(guān)注微信公眾號(hào):碼途有道
二、Git常規(guī)管理流程
1、常用的開(kāi)發(fā)分支
- master 分支 : 主分支,不輕易改動(dòng),主要做正式發(fā)版使用,一般發(fā)版的包都從 master 分支中構(gòu)建
- pre-release 分支 : 預(yù)發(fā)布分支,是在正式發(fā)版前的測(cè)試使用分支,測(cè)試使用的包都從此處構(gòu)建,測(cè)試完成后合并到 master 分支進(jìn)行發(fā)版
- developer 分支 : 開(kāi)發(fā)分支,每個(gè)版本的所有需求開(kāi)發(fā)所在分支
- feature 分支 : 具體的需求開(kāi)發(fā)分支,因?yàn)殚_(kāi)發(fā)大都是團(tuán)隊(duì)協(xié)作,開(kāi)發(fā)成員負(fù)責(zé)自己的需求開(kāi)發(fā)時(shí),一般建議從 developer 分支中重新拉一條分支出來(lái),作為成員自己的開(kāi)發(fā)分支,最后再合并到 developer 分支中,所以 feature 分支一般會(huì)有多個(gè)
- hotfix 分支 : 緊急修復(fù)分支,如果線上版本遇到bug,則一般建議從 master 分支拉出一條分支,作為緊急修復(fù)分支,在 hotfix 測(cè)試沒(méi)有問(wèn)題后,合并到 master 進(jìn)行緊急發(fā)版
2、常用的Git管理流程
從上述常用分支介紹中,我們可以大致了解團(tuán)隊(duì)開(kāi)發(fā)時(shí)的Git管理流程,此處我們?cè)僭敿?xì)介紹一下常用的管理流程。
Step 1 : 項(xiàng)目創(chuàng)建 master 分支。
Step 2 : 從 master 分支中拉出一條 developer 分支,作為所有的開(kāi)發(fā)需求的匯總分支。
Step 3 : 進(jìn)行具體的需求開(kāi)發(fā)時(shí),每位開(kāi)發(fā)成員從 developer 分支中拉出一條分支,作為自己的 feature 分支進(jìn)行具體的需求開(kāi)發(fā)。
Step 4 : 開(kāi)發(fā)完成后的 feature 合并到 developer。
Step 5 : 所有的需求都開(kāi)發(fā)完成后,從 developer 分支中拉出一條 pre-release 分支,提供給 QA 進(jìn)行測(cè)試。不過(guò),有時(shí)為了效率,pre-release 分支可能會(huì)被省略,直接使用 developer 分支代替。但是如果項(xiàng)目開(kāi)發(fā)時(shí)會(huì)出現(xiàn)交叉開(kāi)發(fā),那么個(gè)人認(rèn)為 pre-release 分支的存在還是很重要的。例如本期版本需求還未測(cè)試完畢,進(jìn)行發(fā)版,下一期需求就要進(jìn)行開(kāi)發(fā),則此時(shí) developer 分支中可能就會(huì)混入下期需求代碼,那么 pre-release 分支的存在就很有必要了。
Step 6 : 測(cè)試完成后,pre-release 分支合并到 master 分支進(jìn)行發(fā)版,并且每次發(fā)版都需要打標(biāo)簽,方便后續(xù)對(duì)歷史版本復(fù)盤(pán)。
Step 7 : 如果線上版本出現(xiàn)緊急bug,則從 master 分支拉出一條 hotfix 分支,對(duì) bug 進(jìn)行緊急修復(fù),測(cè)試完成后將 hotfix 分支合并到 master 進(jìn)行緊急發(fā)版,同時(shí)也需合并到 developer 分支。
PS : 所有的遠(yuǎn)程分支合并,個(gè)人建議最好通過(guò) Pull Request (即PR) 來(lái)進(jìn)行。 例如我們要將自己的 feature 分支合并到遠(yuǎn)程的 developer 分支,可以首先創(chuàng)建一個(gè) PR,然后讓其他成員簡(jiǎn)單的 review 代碼的改動(dòng),其他同事 approve 后再合并到 developer。使用此種方式,能更有效的追蹤代碼的改動(dòng)。
三、必須知道的Git常識(shí)
1、Git小常識(shí)
Git的三個(gè)區(qū)域
- 工作區(qū) : 當(dāng)前的工作區(qū)域
- 暫存區(qū) : 被 git add 后的文件所在區(qū)域
- 歷史記錄區(qū) : 已提交歷史,git commit 后的提交文件所在區(qū)域
Git的三種狀態(tài)
- 已修改 (modified) : 表示修改了文件,但還沒(méi)保存到本地倉(cāng)庫(kù)中
- 已暫存 (staged) : 表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的暫存區(qū)中
- 已提交 (committed) : 表示數(shù)據(jù)已經(jīng)安全地保存在本地倉(cāng)庫(kù)中
2、Git基本命令
git init : 初始化倉(cāng)庫(kù)
在當(dāng)前目錄創(chuàng)建一個(gè)Git倉(cāng)庫(kù),如果需要在指定目錄創(chuàng)建可以使用 git init [目錄](méi)
git add : 添加文件到暫存區(qū)
- git add [file1] [file2] … : 將指定文件添加到暫存區(qū)。
- git add [dir] : 將指定目錄添加到暫存區(qū)。
- git add . : Git 1.x版本時(shí),將新文件 (new) 和被修改 (modified) 文件添加到暫存區(qū),不包括被刪除 (deleted) 文件;在Git 2.x版本時(shí),被刪除文件也會(huì)被添加到暫存區(qū)域。
- git add -u (git add --update的縮寫(xiě)) : 將被修改 (modified) 和被刪除 (deleted) 文件添加到暫存區(qū),不包括新文件 (new)。
- git add -A (git add --all的縮寫(xiě)): 提交所有變化,是 add . 與 add -u 的合集。
git commit : 將暫存區(qū)內(nèi)容提交到本地倉(cāng)庫(kù)中
- git commit -m [message] : 將暫存區(qū)內(nèi)容提交到本地倉(cāng)庫(kù)中,message 是本次提交的描述信息
- git commit [file1] [file2] … -m [message] : 將指定文件提交到本地倉(cāng)庫(kù)中
- git commit -a : -a 參數(shù)設(shè)置修改文件后不需要執(zhí)行 git add 命令,直接來(lái)提交
- git commit -am [message] : -a 參數(shù)設(shè)置修改文件后不需要執(zhí)行 git add 命令,直接來(lái)提交
git reset : 版本回退
git reset 的常用命令格式:git reset [–mixed | --soft | --hard | --merge | --keep] [HEAD],默認(rèn)是**–mixed**。
- HEAD 說(shuō)明
HEAD 是當(dāng)前分支版本頂端的別名,指向我們?cè)诋?dāng)前分支的最近一次提交。例如下面一共進(jìn)行了A、B、C三次提交,則 HEAD 指向 C。
- 三種常用模式
小例子:看上述例子,共有 A、B、C、D 四個(gè) commit,D 是最近一次提交,則 HEAD 指向 D。此時(shí)使用 git reset --mixed [commit B] 進(jìn)行版本回退,則 HEAD 指向 B,暫存區(qū)回退到 B 版本,而 C、D 的 commit 內(nèi)容會(huì)被回撤到工作區(qū)(即未被 git add 的狀態(tài))。
小例子:還是看上述例子,共有 A、B、C、D 四個(gè) commit,D 是最近一次提交,則 HEAD 指向 D。此時(shí)使用 git reset --soft [commit B] 進(jìn)行版本回退,則 HEAD 指向 B,而 C、D 提交的內(nèi)容則回撤到暫存區(qū)中(即已 git add 但未 git commit 狀態(tài)), C、D 的 commit 記錄會(huì)被擦除,工作區(qū)中的內(nèi)容不會(huì)發(fā)生改變。
小例子:還是看上述例子,共有 A、B、C、D 四個(gè) commit,D 是最近一次提交,則 HEAD 指向 D。此時(shí)使用 git reset --hard [commit B] 進(jìn)行版本回退,則 HEAD 指向 B,暫存區(qū)回退到 B 版本,工作區(qū)回退到 B 版本, C、D 的 commit 內(nèi)容被丟棄。
另外還有 –keep 與 –merge 兩種模式,但是不常用,此處不就不再詳述。
常見(jiàn)使用
HEAD 與 HEAD~0 表示當(dāng)前版本
HEAD^ 與 HEAD~1 表示上一個(gè)版本
HEAD^^ 與 HEAD~2 表示上上個(gè)版本
HEAD^^^ 與 HEAD~3 表示上上上個(gè)版本
以此類推…
git reset [模式] HEAD~1,表示回退到上個(gè)版本,或者我們也可以使用 git reset [模式] [commit id] 來(lái)回退到指定的 commit 版本。
3、Git分支管理
- git branch [branchname] : 以當(dāng)前分支為模板,創(chuàng)建新分支
- git branch -d [branchname] : 刪除指定分支
- git checkout [branchname] : 切換到指定分支我一
- git checkout -b [branchname] : 創(chuàng)建分支,切換到該分支
- git merge [branchname] : 將指定分支合并到當(dāng)前分支
- git merge --no-ff [branchname] : 關(guān)閉 fast-forward 模式,將指定分支合并到當(dāng)前分支,與 git merge [branchname] 的區(qū)別是 git merge --no-ff [branchname] 合并時(shí)會(huì)創(chuàng)建一個(gè) merge 的 commit,保留原來(lái)的分支 commit 歷史,一般推薦使用此種合并方式
小例子:如上所示,當(dāng)前我們?cè)?master 分支,共進(jìn)行了兩次 commit;此外還有一個(gè)以 master 分支為模板創(chuàng)建的 hotfix 分支,共進(jìn)行了兩次 commit。
方式一: 我們使用 git merge hotfix 合并 hotfix 到 master 分支上,此時(shí) hotfix 的 commit 記錄會(huì)完全合并到 master 分支上,那么 master 分支上的 commit 記錄為 [master-commit1]—>[master-commit2]—>[hotfix-commit3]—>[hotfix-commit4],如下圖左側(cè)的圖,master 的分支歷史被擾亂。這時(shí)我們使用 git reset --hard HEAD^ 進(jìn)行版本回退,則 master 會(huì)回退到 hotfix-commit3 版本。
方式二: 我們使用 git merge --no-ff hotfix 合并 hotfix 到 master 分支上,master 分支的 commit 歷史會(huì)被保留,如下圖右側(cè)圖。此時(shí)使用 git reset --hard HEAD^ 進(jìn)行版本回退,則 master 會(huì)回退到 master-commit2
4、Git遠(yuǎn)程管理
- git clone [url] : 克隆項(xiàng)目
- git pull [遠(yuǎn)程主機(jī)名] [遠(yuǎn)程分支名]:[本地分支名] : 拉取指定遠(yuǎn)程分支與本地分支合并
小例子:
- git push [遠(yuǎn)程主機(jī)名] [本地分支名]:[遠(yuǎn)程分支名] : 推送指定本地分支到遠(yuǎn)程并合并,如果遠(yuǎn)程分支不存在,則會(huì)創(chuàng)建遠(yuǎn)程分支
小例子:
- git push origin --delete [遠(yuǎn)程分支名] : 刪除指定的遠(yuǎn)程分支
- git tag -l : 顯示已有標(biāo)簽
- git tag [tagname] : 創(chuàng)建標(biāo)簽
- git push origin [tagname] : 將本地標(biāo)簽推送到遠(yuǎn)程
如果本文對(duì)你有幫助,就關(guān)注一下微信公眾號(hào):碼途有道 !
總結(jié)
以上是生活随笔為你收集整理的常规的Git管理流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 夏新N820/N821 recovery
- 下一篇: hihocoder1251Uvalive