1. 程式人生 > >分支管理~Bug分支,feature分支。git stash; 強刪git branch -D <name> (十二)

分支管理~Bug分支,feature分支。git stash; 強刪git branch -D <name> (十二)

                                                                 Bug 分支

軟體開發中,bug無處不在。有了bug就需要修復,在Git中,由於分支是如此的強大,所以,每個bug都可以通過一個新的臨時分支來修復,修復後,合併分支,然後將臨時分支刪除。

當你接到一個代號101的bug的任務需要修復時,很自然地,你想建立一個分支 issue-101 來修復它,但是,等等,當前正在分支 dev 上進行的工作還沒有提交,如下:

並不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎麼辦?

幸好,Git 還提供了一個 stash 功能,可以把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作,如下git stash 命令

現在,用 git status 檢視工作區,就是乾淨的(除非有沒有被Git管理的檔案),因此可以放心地建立分支來修復bug。

首先確定要在哪個分支上修復bug,假定需要在 master 分支上修復Bug,就從 master 建立臨時分支,如下:

現在修復bug,手動把檔案 readme.txt 裡的內容 “ one two three ” 刪除,如下:

然後新增、提交:

修復完成後,切換到 master 分支,並完成合並,最後刪除 issue-101 分支,如下:

太棒了,原計劃兩個小時的bug修復只花了5分鐘!現在,是時候接著回到dev分支幹活了!

工作區是乾淨的,剛才的工作現場存到哪去了?用 git stash list 命令看看,如下:

工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法:
            
一是用 git stash apply 恢復,但是恢復後,stash內容並不刪除,你需要用 git stash drop 來刪除;
            
二是用 git stash pop ,恢復的同時把stash內容(貯藏現場記錄)也刪了,如下:

再用 git stash list 檢視,就看不到任何 stash  內容 了,如下:(沒有任何貯藏工作現場的記錄了)

你可以多次stash,恢復的時候,先用 git stash list  檢視,然後恢復指定的stash,用命令,如下:

$ git stash apply [email protected]{0}

小結:

1、修復bug時,我們會通過建立新的分支進行修復bug,然後合併新分支,最後刪除新的分支;
2、當手頭工作沒有完成時,先把工作現場貯藏一下通過命令  git stash ,然後去修復bug,修復後,再 git stash pop,回到工作現場。


                                                                 feature 分支

軟體開發中,總有無窮無盡的新的功能要不斷新增進來。
新增一個新功能時,你肯定不希望因為一些實驗性質的程式碼,把主分支搞亂了,所以,每新增一個新功能,最好新建一個feature分支,在上面開發,完成後,合併,最後,刪除該feature分支。
            
現在,你終於接到了一個新任務:開發代號為Vulcan的新功能,該功能計劃用於AR社交。於是準備開發,建立並切換到新的分支,如下:

5分鐘後,開發完畢:

切回分支 dev,準備合併 git merge ,如下:

一切順利的話,feature分支和bug分支是類似的,合併,然後刪除。

但是!就在此時,接到上級命令,因經費不足,新功能必須取消!

雖然白乾了,但是這個包含機密資料的分支還是必須就地銷燬,如下:

error: The branch 'feature-vulcan' is not fully merged。表示:錯誤:分支“feature-vulcan”沒有完全合併。

If you are sure you want to delete it, run 'git branch -D feature-vulcan'。表示: 如果您確定要刪除它,請執行“git分支-D feature-vulcan”。

銷燬失敗。Git友情提醒,feature-vulcan分支還沒有被合併,如果刪除,將丟失掉修改,如果要強行刪除,需要使用大寫的-D引數。

現在我們強行刪除,如下:

小結:

1、開發一個新的功能,最好新建一個分支feature,再作開發;
            
2、如果要丟棄一個沒有被合併過的分支,可以通過命令 git branch -D <name> 強行刪除。


轉自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000