讓咱們來看一個簡單的分支新建與分支合併的例子,實際工做中你可能會用到相似的工做流。 你將經歷以下步驟:javascript
開發某個網站。html
爲實現某個新的需求、問題(#53問題),建立一個分支(名爲:iss53)。java
在這個分支上開展工做。git
正在此時,你忽然接到一個電話說有個很嚴重的問題須要緊急修補。 你將按照以下方式來處理:ide
切換到你的線上分支(production branch)。學習
爲這個緊急任務新建一個分支(名爲:hotfix),並在其中修復它。測試
在測試經過以後,切換回線上分支(名爲:master),而後合併這個修補分支,最後將改動推送到線上分支,並刪除hotfix分支。網站
切換回你最初工做的分支(iss53)上,繼續工做。idea
首先,咱們假設你正在你的項目上工做,而且已經有一些提交。spa
如今,你已經決定要解決你的公司使用的問題追蹤系統中的 #53 問題。 想要新建一個分支並同時切換到那個分支上,idea上操做以下:
填寫分支名稱
在iss53分支上開發,以下
將分支推送到遠程倉庫
點擊push推送到遠程倉庫
在遠程倉庫查看是否有iss53分支
分支的建立與提交完成!
如今你接到那個電話,有個緊急問題等待你來解決。 有了 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
回到iss53分支上
當前git分支結構以下圖:
繼續在分支iss53上寫代碼
iss53開發完成,提交到遠程分支(同以前操做同樣,圖略);
切換到master分支(同以前操做同樣,圖略);
將iss53分支合併到master分支上(同以前操做同樣,圖略),此時的分支結構圖以下:
刪除本地iss53分支(同以前操做同樣,圖略);
刪除遠程iss53分支(同以前操做同樣,圖略);
完美!
圖文理解不到位,二麻二麻的,直接視頻學習:視頻學習