接上篇(http://my.oschina.net/woshixiaomayi/blog/521519)繼續。
git
6、建立與合併分支。
app
在版本回退中,每次提交,Git都把他們串成一條時間線,這條時間線就是一個分支。在Git中,這個分支叫主分支,即master分支。HEAD嚴格來講不是指向提交,而是指向master,master纔是指向提交的,so,HEAD指向的就是當前分支。
.net
建立新的分支dev,而且切換到dev分支上,命令:
blog
git checkout -b dev 建立新的分支,而且切換到該分支上,這至關於兩條命令:
開發
git branch dev 建立分支dev
get
git checkout dev 切換到分支dev
it
git branch 查看分支,會列出全部分支,而且會在當前的分支上添加一個星號。
ast
場景:在dev分支上,在readme.txt中作出一點修改。而後在master分支上查看。
bug
能夠發如今master分支上是看不到dev分支新修改的內容的,這時候咱們須要把dev分支上的內容合併到master上,切換到master分支,使用命令:
apply
git merge dev 將目標分支合併到當前分支上。如今再來查看master分支中的readme.txt,就可以看到
在dev分支上修改的內容了。值得注意的是,在合併中下方出現的提示文字,有一個Fast-forward,Git告訴咱們,此次合併是「快進模式」,也就是直接把master分支指向dev的當前提交,因此合併速度很是快。
合併以後刪除dev分支,命令:
git branch -d dev 加上一個-d,即爲刪除該分支。
那麼如何解決衝突呢?
場景:建立一個新的分支,fenzhi1,修改了readme.txt文件。而後在master分支上也一樣修改了readme.txt,這時候在master分支上進行合併。能夠看到提示信息說:Automatic merge failed;衝突誕生了。這時候,可使用 git status ,查看一個狀態,會告訴你:both modified:readme.txt。有兩條修改信息。
cat readme.txt 查看一下內容,
<<<<<<<<<<<<<<<HEAD
aaaaaaaaaaaaaaaaaaaaaaaaaa
==================
bbbbbbbbbbbbbbbbbbbbbb
>>>>>>>>>>>>>>>fenzhi1
<<<HEAD是指主分支修改的內容,>>>>>>>fenzhi1 是指fenzhi1上修改的內容,如今能夠修改這個文件的內容,而後add,commit提交便可。這樣合併時衝突的問題就解決了。
分支管理策略
一般合併分支時,git通常使用「Fast forward」模式,上面也有提到。在這種模式下,刪除分支後,會丟掉分支信息,可使用參數 --no-ff 來禁用「Fast forward」模式,命令:
git merge --no-ff -m "使用no-ff合併分支" dev 使用--no-ff合併分支dev
git branch -d dev 刪除dev分支
git log --graph --pretty=oneline --abbrev-commit 能夠看到被刪除的版本號還在。
分支策略:首先master主分支應該是很是穩定的,也就是用來發布新版本的,通常狀況下不容許在上面幹活,幹活通常狀況下在新建的其餘分支上,幹完活,能夠把dev分支代碼合併到主分支master上來。
7、bug分支
在開發中,會常常碰到bug問題,那麼就須要修復,每一個bug均可以建立一個臨時分支來修復,修復完成後,在合併分支,而後將臨時分支刪除便可。
場景:在工做中忽然接到了一個404bug,咱們能夠建立一個404分支來修復它,可是如今當前的dev分支上還有一些工做沒有提交,沒法建立和切換分支,這個怎麼辦呢?Git還提供了stash功能,能夠把當前工做現場隱藏起來,等之後恢復了現場繼續工做,命令:
git stash 將當前的工做隱藏起來,這時候使用git status,來查看狀態,就會發現nothing to commit,working directory clean.工做區很乾淨。如今就能夠建立分支,修復bug了。修改完成一切都搞定以後,仍是要回到dev分支繼續幹活的。
git checkout dev 回到dev分支
git stash list 查看隱藏起來的工做現場
將工做現場恢復有兩個命令:1,git stash apply 恢復,恢復以後,stash內容不會刪除,若是要刪除,須要使用命令git stash drop來刪除。2,使用git stash pop,刪除的同時把stash內容也刪除了。