在版本回退裏,你已經知道 ,每次提交,Git都把它們串i成一條時間線,這條時間線就是一個分支,截至到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支,HEAD嚴格來講不是指向提交,而是指向master,master纔是指向提交的,因此,HEAD指向的就是當前分支git
每次提交,master分支都會向前移動一步,這樣,隨着你不斷提交,master分支的線也愈來愈長:安全
當咱們建立新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:ui
你看,Git建立一個分支很快,由於除了增長一個dev指針,改改HEAD指向,工做區的文件都沒有任何變化。spa
不過,從如今開始,對工做區的修改和提交就是針對dev分支了,好比新提交一次後,dev指針往前移動一步,而master指針不變3d
假如咱們在dev上的工做完成了,就能夠把dev合併到master上,Git怎麼合併呢?最簡單的方法就是直接把master指向dev當前的提交,就完成合並了:指針
因此Git合併分支也很快,就改改指針,工做區內容也不變!blog
合併完分支後,甚至能夠刪除dev分支,刪除dev分支就是把dev指針給刪除掉,刪掉後,咱們就剩下一條master分支了:it
下面開始實戰:io
首先,咱們建立一個分支dev,而後切換到dev分支:ast
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:
$git branch dev
$git checkout dev
Switched to branch 'dev'
而後用git branch命令查看當前的分支
$ git branch
* dev
master
git branch命令會列出全部分支,當前分支前面會標一個*號
而後嗎,咱們就能夠在dev分支上正常提交,好比對readme.txt作個修改,加上一行:
Creating a new branch is quick.
而後提交:
$ git add readme.txt
$ git commit -m "branch test"
[dev 3d9a6be] branch test
1 file changed, 2 insertions(+), 1 deletion(-)
如今,dev分支的工做完成了,咱們就能夠切換到master分支:
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
切換回master分支後,再查看一下readme.txt文件,剛纔添加的內容不見了,由於那個是提交在dev分支上的,而master分支此刻的提交點並無變:
如今咱們把dev分支的工做成果合併到master分支上:
$ git merge dev
Updating d255aa7..3d9a6be
Fast-forward
readme.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
git merge命令用於合併指定分支到當前分支,合併後,再查看readme.txt的內容,就能夠看到,和dev分支的最新提交是徹底同樣的。
注意到上面的Fast-forward信息,Git告訴咱們,此次合併是「快進模式」,也就是直接把master指向dev當前提交,因此合併速度很是快。
固然,也不是每次合併都能Fast-forward,之後會講到其餘方式的合併
合併完成之後,就能夠放心的刪除dev分支了:
$ git branch -d dev
Deleted branch dev (was 3d9a6be).
刪除後,查看branch,就只剩下master分支了:
$ git branch
* master
由於建立、合併和刪除分支很是快,因此Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工做效果是同樣的,但過程更安全。
摘抄自:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000