1. 程式人生 > >Git workflow工作流及邊角知識

Git workflow工作流及邊角知識

開篇

Git是個老生長談的問題了,如何在工作協作中使用Git,不同團隊有不同的使用方式,最簡單的可能就單個master分支直接擼,把Git當成svn來使用,這樣用起來簡單,但是缺乏分散式的思想,而且在並行開發過程中,光建立trunk、branch、tag等等的就很繁瑣了。業界通用的用法還是Git workflow工作流。

workflow工作流

標準的workflow工作流是如下圖所示:
workflow

具體的使用方式可以參考以下兩篇文章:

我們在此框架上,結合團隊特點,簡化了流程,定的規則是:

  1. 基本分支: master、develop、feature、release、bugfix
  2. master分支: 只向master做併入操作,當feature開發完畢,向master併入並打上標籤。
  3. develop分支: 當新feature需要開發的時候,直接從develop建立分feature分支;
  4. feature分支: feature分支作為特定版本開發分支,提測通過後,向develop併入,同時向master合併並打上標籤,切出release分支,配置上線引數,刪除feature分支。
  5. release分支: 作為打包釋出的分支,同時也作為bugfix的分支,修復完就向develop和master合併;
  6. hotfix分支 從release上fork出來,然後併入到release中,其後生命週期和release一樣,視情況而定,有時直接在release分支上做bugfix就不需要用到hotfix了;

rebase onto

在說rebase onto之前,我們先來談一談rebase。把其他分支或者其他修改commit合併到工作分支上,一般的處理方式是merge和rebase(衍合)。
merge的兩種主要用途:

  1. 用於pull (pull=fetch+merge)
  2. 用於其他的分支合併到工作分支

首先我們有兩個分支feature分支和master分支,feature分支有節點E、F、G,master分支有A、B、C、D。
在這裡插入圖片描述

現在我們在當前的master分支上執行merge feature分支的操作git merge feature,這個命令將會把在master分支上二者共同的節點(B節點)之後分離的節點(即feature分支的E F G節點)重現在master分支上,直到feature分支當前的commit節點(G節點),並位於master分支的頂部。並且沿著master分支和feature分支建立一個記錄合併結果的新節點,該節點帶有使用者描述合併變化的資訊。

即下圖中的H節點,G節點和D節點都是H節點的父節點。這就是我們常見的鑽石鏈了。如下圖所示:
在這裡插入圖片描述

git rebase 則不一樣,它形成的是feature分支在共同節點B以後的快照(E’、F’、G’),並直接插入到master的尾部commit節點上,完成變基操作,這就是git rebase master feature的整個過程。
在這裡插入圖片描述

rebase是一個變基操作,rebase onto則是多主題變基操作。
來看看以下的情況:

在這裡插入圖片描述

我們在feature分支上開發到F節點的時候,突然發現有個bug需要修復,然後就從F節點上新建了分支bugfix,提交了H、I、J節點,修復完成後想直接講這三個節點合併到master上。
這個時候,如果直接用rebase命令的話,那麼接在master D節點後面的就會是E、F、H、I、J這五個節點的快照,但是我們只想要H、I、J的快照啊。
這時,就可以用git rebase --onto master feature bugfix了。其中feature、bugfix形成了一個前開後閉的區間,及前面feature分支上的E、F不要了,後面的bugfix分支H、I、J才需要。
最後的結果是
在這裡插入圖片描述

reset

git reset命令是Git提供的後悔藥之一,它可以幫我們把內容恢復到指定的commit提交版本。
這個操作比較嚇人,一般慎用。還是用revert多一點
一共有三種呼叫模式

  1. 比如我們得知某個提交的雜湊值是df132es
git reset df132es --hard
  1. 使用HEAD作為引數
git reset HEAD^ --hard

HEAD執行當前分支, ^ 當前分支所指向提交的前一個提交,^ ^ 表示當前分支所指向提交的前一個分支的前一個分支,以此類推;^^過多自然不太方便,可以使用HEAD~2表示

  1. 將分支指向最後一次commit,下面使用分支名稱(master)作為引數,將分支指reset 向前一個commit向前一個commit)作為引數,將分支指reset 向前一個commit向前一個commit
git reset master^ --hard

revert

git revert 撤銷某次操作,此次操作之前和之後的 commit 和 history 都會保留,並且把這次撤銷作為一次最新的提交。git revert是提交一個新的版本,將需要revert的版本的內容再反向修改回去,版本會遞增,不影響之前提交的內容。
命令用法與reset類似,但是revert並不會對原有的提交記錄產生影響,只會生成一個反向的commit來進行恢復,所以回滾版本的時候一般會選擇這個。
具體可以參考這個:
回滾revert和reset區別

相關推薦

Git workflow工作邊角知識

開篇 Git是個老生長談的問題了,如何在工作協作中使用Git,不同團隊有不同的使用方式,最簡單的可能就單個master分支直接擼,把Git當成svn來使用,這樣用起來簡單,但是缺乏分散式的思想,而且在並行開發過程中,光建立trunk、branch、tag等等的

SCM之Git工作原理常規操作

AD 兩個 rem git png workspace 語言 原理 狀態 在現在的軟件構造過程中,SCM的使用必不可少,現在比較常用的就應該屬於git及github。接下來我們就要介紹一下有關git 的工作原理。 首先,git的區域可分為workspace(工作目錄也就是本

Git 簡單工作,幫你快速使用 Git

安裝 Installing on Mac 通過 Homerew 安裝 brew install git 其它平臺安裝可以參考:Installing Git 建立新倉庫 建立新資料夾,進入,然後執行: git init 檢出倉庫 // 從本地 git c

3.Git工作(慕課網)

1.建立本地倉庫並初始化 mkdir demo cd demo git init ls -a 2.在工作區建立一個檔案並寫入“第一天需求已經安成。” echo "第一天需求已經安成。" >>test.txt git status 3.將增加的檔案新增到暫存

《流程的永恆之道:工作BPM技術的理論、規範、模式最佳實踐》書籍導讀

編輯推薦   業內深入融合流程管理與流程技術的專著,全面講解了業務流程及其實現,企業打造高效流程型組織的實踐指南。  本書作者是國內資深的工作流及BPM領域專家,現任國內知名的IT上市公司東華軟體股份公司房產事業部執行副總經理。近些年,集首席諮詢顧問、系統分析師、架構師、技

Gitflow Workflow工作

https://blog.csdn.net/u011904605/article/details/53224420我說的以下流程,sourceTree等工具已經完美的支援了,滑鼠點兩下就完成了。簡直是完美。簡介Feature Branch Workflow是一種非常靈活的開發

ABAP WORKFLOW工作建立(一)

SAP的工作流是個很老的內容了 做過幾次工作流的專案,現在有時間稍微寫幾篇部落格 一、TCODE:SWDD 建立一個新的workflow 工作流的流程無非就是兩種,第一:同意。第二:拒絕(或者駁回) 1:同意就是進入下一個節點 2:拒絕就是返回上一個節點,或者是直接返回建立

Oozie workflow工作action間引數傳遞實現

假設workflow裡有兩個action節點,shell和hive,hive需要用到shell節點裡的值,shell指令碼如下 #!/bin/sh day=`date '+%Y%m%d%H'` e

為什麼使用 Git-flow 工作

聯想樂窗專案組-前端組 張晉佩整理 內容摘自網上,如有侵權,聯絡刪除 Git-flow 工作流介紹 主要內容 本文主要分主要包括以下幾個部分的內容 集中式工作流 功能分支工作流 功能分支工作流的問題 git flow 的分支模型介紹 git fl

SharePoint 2013 Nintex Workflow 工作幫助(六)

工作流動作7. Call web service(Integration分組)一個呼叫WebService的操作。自然,配置項中主要是指向一個WebService進行呼叫。關於配置項的說明:URL必填項

workflow工作型別及其區別

在workflow中,工作流分為兩種型別,順序工作流(Sequential)和狀態機工作流(State Machine)。 順序工作流將一系列要執行的步驟以一種預先設計好的流程順序執行。在這種工作流裡,控制流程的是我們很熟悉的如if-else和while迴圈結構。順序工作

WF工作技術內幕 —— 通過Web服務呼叫Workflow工作(基礎例項)

在開發一個企業ERP系統時,其業務流程是開發的關鍵,系統往往會將開發好的業務方案發布為Web服務以供外界呼叫。客戶可以通過伺服器,網際網路等等方式 去呼叫服務,而解決業務上需要及資訊的交換問題。有見及此,微軟在.NET 3.0基礎上釋出了WF,WCF,以及WCS,WPF(為

GIT工作-WorkFlow

開篇 Git 三大特色,分支,暫存區,工作流,今天終於要寫到 WorkFlow 了,我彷佛已經看到勝利的曙光,走起。 何謂工作流 WorkFlow 的字面意思,工作流,即工作流程。在分支篇裡,有說過這樣的話:因為有分支的存在,才構成了多工作流的特色。事實的確如此,因為專案開發中,多人協作

Gemini.Workflow 雙子工作高階教程:資料庫設計各表作用說明

整體資料庫設計,可見這一篇:Gemini.Workflow 雙子工作流高階教程:資料庫-設計文件 這裡對各資料表進行介紹: 工作流裡的設計表並不多,核心只有以下8個:   下面按照流程的順序來介紹一下表的作用,很簡單的就介紹完了: 1、流程定義表(WF_Definition)

工作引擎Oozie(一):workflow

觸發 line last ssa pig oozie apt cnblogs 定時任務 1. Oozie簡介 Yahoo開發工作流引擎Oozie(馭象者),用於管理Hadoop任務(支持MapReduce、Spark、Pig、Hive),把這些任務以DAG(有向無環圖)方式

Git工作指南:Gitflow工作

lee 相對 技術 做的 tags finish 項目 ember 同時 這節介紹的Gitflow工作流借鑒自在nvie的Vincent Driessen。 Gitflow工作流定義了一個圍繞項目發布的嚴格分支模型。雖然比功能分支工作流復雜幾分,但提供了用於一個

Git工作指南:Pull Request工作

看到了 con 維護 work ont ria 而是 地址 org Pull Requests是Bitbucket上方便開發者之間協作的功能。提供了一個用戶友好的Web界面,在集成提交的變更到正式項目前可以對變更進行討論。 開發者向團隊成員通知功能開發已經完成,Pul

知識小結】Git 個人學習筆記心得

art over round TP 緩存 PE QQ 的區別 rda https://mp.weixin.qq.com/s/D96dXYfu3XAA4ac456qo0g git架構 工作區:就是你在電腦裏能看到的目錄。 版本庫:工作區有一個隱藏目錄.git,,而是

git工作流程初次操作

clip put 告訴 email 編輯器 master git push 打開 mage git add 命令將工作區文件提交到暫存區 git status查看文件狀態 git commit -m “提交描述”將暫存區文件提交到倉庫 使用git嘗試操作 在想

Activiti工作引擎學習流程設計器的安裝(Eclipse外掛)

工作流簡介     我們先來描述一個在工作中經常用到的一個流程:請假     員工張三請假一天 主管王五批准     員工李四請假一天 主管王五不批准  &nbs