1.分支的建立與合并使用場景介紹
讓我們來看一個簡單的分支建立與分支合并的例子,實際工作中你可能會用到類似的工作流。 你将經曆如下步驟:
- 開發某個網站。
- 為實作某個新的需求、問題(#53問題),建立一個分支(名為:iss53)。
- 在這個分支上開展工作。
正在此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補。 你将按照如下方式來處理:
- 切換到你的線上分支(production branch)。
- 為這個緊急任務建立一個分支(名為:hotfix),并在其中修複它。
- 在測試通過之後,切換回線上分支(名為:master),然後合并這個修補分支,最後将改動推送到線上分支,并删除hotfix分支。
- 切換回你最初工作的分支(iss53)上,繼續工作。
- iss53問題處理完後,合并到master主幹上,删除iss53分支。
2、建立分支
首先,我們假設你正在你的項目上工作,并且已經有一些送出。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugzMyIDOxETOtYzN2YzM3EzNxATM1ATOxAjMtYDOxgTN48CX1ATOxAjMvwlN4EDO1gzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
這是一個簡單送出曆史
現在,你已經決定要解決你的公司使用的問題追蹤系統中的 #53 問題。 想要建立一個分支并同時切換到那個分支上,idea上操作如下:
填寫分支名稱
在iss53分支上開發,如下
将分支推送到遠端倉庫
點選push推送到遠端倉庫
在遠端倉庫檢視是否有iss53分支
分支的建立與送出完成!
3、開發iss53的過程中建立分支(hotfix)解決線上問題後,并删除該分支
分支随着工作的進展向前推進
現在你接到那個電話,有個緊急問題等待你來解決。 有了 Git 的幫助,你不必把這個緊急問題和
iss53
的修改混在一起,
你也不需要花大力氣來還原關于 53# 問題的修改,然後再添加關于這個緊急問題的修改,最後将這個修改送出到線上分支。 你所要做的僅僅是切換回
master
分支。
idea上操作如下:
特别注意:在你這麼做之前,要留意你的工作目錄和暫存區裡那些還沒有被送出的修改,它可能會和你即将檢出的分支産生沖突進而阻止 Git 切換到該分支。 最好的方法是,在你切換分支之前,保持好一個幹 淨的狀态。 有一些方法可以繞過這個問題(即,儲存進度(stashing) 和 修補送出(commit amending)),我們會在 儲藏與清理 中看到關于這兩個指令的介紹。
這個時候,你的工作目錄和你在開始 #53 問題之前一模一樣,現在你可以專心修複緊急問題了。
請牢記:當你切換分支的時候,Git 會重置你的工作目錄,使其看起來像回到了你在那個分支上最後一次送出的樣子。
Git 會自動添加、删除、修改檔案以確定此時你的工作目錄和這個分支最後一次送出時的樣子一模一樣。
接下來,你要修複這個緊急問題。 讓我們建立一個針對該緊急問題的分支(hotfix branch),在該分支上工作直到問題解決:
這個時候,git的分支結構圖如下:
基于
master
分支的緊急問題分支
hotfix上進行代碼開發,模拟如下:
你可以運作你的測試,確定你的修改是正确的,然後送出代碼到遠端倉庫,送出到遠端倉庫的操作與剛才送出iss53操作一樣。
當hotfix這個緊急問題的分支開發完成後,将其合并回你的
master
分支來部署到線上。 你可以使用idea的
git merge
來達到上述目的:
首先切換到master
然後,以master為主線合并hotfix,這個很重要,因為是以master為主,将hotfix的的代碼合并到master上,不要把順序弄返
現在,最新的修改已經在
master
分支所指向的送出快照中,這是你隻需要送出master到遠端倉庫(非常重要,千萬别忘記),你可以着手釋出該修複了。
此時,git的分支結構圖如下:
搞定,這時候緊急問題已解決,并且順利的合并到了master主線上,接下來我們就應該删除分支hotfix
删除本地倉庫分支hotfix
删除遠端倉庫分支hotfix
4、回到分支iss53上繼續工作,工作完後合并到master,并删除iss53分支
回到iss53分支上
目前git分支結構如下圖:
繼續在分支iss53上寫代碼
iss53開發完成,送出到遠端分支(同之前操作一樣,圖略);
切換到master分支(同之前操作一樣,圖略);
将iss53分支合并到master分支上(同之前操作一樣,圖略),此時的分支結構圖如下:
删除本地iss53分支(同之前操作一樣,圖略);
删除遠端iss53分支(同之前操作一樣,圖略);
完美!