每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,這個分支叫主分支,即master
分支,HEAD
指向master
,master
指向提交,因此,HEAD
指向的就是當前分支。每次提交,master
分支都會向前移動一步,這樣,隨着你不斷提交,master
分支的線也愈來愈長。python
當咱們建立新的分支dev
時,git新建了一個指針叫dev
,指向master
相同的提交,同時把HEAD
指向dev
,就表示當前分支在dev
上,不過,從如今開始,對工做區的修改和提交就是針對dev
分支了,好比新提交一次後,dev
指針往前移動一步,而master
指針不變,假如咱們在dev
上的工做完成了,就能夠把dev
合併到master
上。最簡單的合併方法,就是直接把master
指向dev
的當前提交,就完成了合併。合併完分支後,甚至能夠刪除dev
分支。刪除dev
分支就是把dev
指針給刪掉,刪掉後,咱們就剩下了一條master
分支git
首先,建立dev分支並切換到該分支,ruby
git checkout -b devspa
解釋:-b表示建立並切換,線程
至關於兩條命令:指針
git branch devcode
git checkout dev開發
能夠用命令git branch查看當前分支,會列出全部分支,在當前分支前標一個*號。it
此時對readme.txt作修改,而後提交io
git add readme.txt
git commit -m 'branch test'
如今切換回到master分支
git checkout master
查看readme文件,發現剛纔添加的內容不見了,這是由於那個提交是在dev分支上,而再也不當前的master分支上。
這時把dev分支的修改合併到master上
git merge dev
用於合併指定分支到當前分支上,
合併後,再查看readme文件,添加的內容出現了。
這時就能夠刪除dev分支了,
git branch -d dev
刪除後,查看branch
git branch
只剩下master分支了。
衝突解決:
1,建立並切換dev分支
git checkout -v dev
修改readme文件,而後添加到暫存區,再提交新的commit。
2,切換回master,
git checkout master
修改readme文件,而後添加到暫存區,再提交新的commit。
master
分支和dev分支各自都分別有新的提交,這種狀況下,Git沒法執行「快速合併」,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突,
git merge dev
果真出現衝突信息,顯示合併失敗。
git status
也能夠告訴咱們衝突的文件,
咱們能夠直接查看readme.txt的內容:
Git用<<<<<<<
,=======
,>>>>>>>
標記出不一樣分支的內容,咱們修改readme.txt後保存
而後添加到暫存區,再提交新的commit,,
合併後,用git log查看分支歷史,
git log --graph --pretty=online --abbrev-commit
最後,刪除dev分支:
git branch -d dev
通常分支進行合併時,git會採用Fast Forward模式,但這種模式有弊端,就是刪除分支後,會丟掉分支信息。若是要強制禁用Fast forward
模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。
建立並切換dev分支
git checkout -v dev
修改readme文件,而後添加到暫存區,再提交新的commit。
如今,咱們切換回master
:
git checkout master
準備合併dev
分支,請注意--no-ff
參數,表示禁用Fast forward
:
git merge --no-ff -m 'merge with no-ff' dev
合併後,咱們用git log
看看分支歷史:
git log --graph --pretty=oneline --abbrev-commit
分支管理原則:master分支應該是很是穩定的,即僅僅用來發布新版本。平時在dev分支上進行試驗,時不時分之合併便可。
假設當前在dev分支上進行工做,可是須要立刻修復bug,如何處理呢?
因爲dev的工做還未完成,因此不能提交,
1,使用git stash命令,把當前的工做現場儲存起來,等恢復現場以後繼續工做。
git stash
2,假設bug在master分支上,從master建立臨時分支
git checkout master
git checkout -b issue-101
3,修改bug,而後添加到暫存區,並提交
git add readme.txt
git commit -m 'fix bug 101'
4,切換到master分支,合併,刪除issue-101分支。
git checkout master
git merge --no-ff -m 'merge bug fix101' issue-101
git branch -d issue-101
5,回到dev分支
git checkout dev
6,查看工做現場
git stash list
7,恢復工做線程
git stash pop
恢復的同時也把stash內容刪除了
軟件開發中,每添加一個功能,最好新建一個feature分支,完成後合併,最後刪除該feature分支。
假如,開發代號爲scan的新功能:
1,增長並切換到新分支上,
git checkout -b feature-sacan
2,開發完畢,增長到暫存區,並提交
git add scan.py
git commit -m 'develop new function'
3,切換到dev分支,
git checkout dev
4,合併和bug分支的合併相似,合併後刪除。
或者因某些緣由,這個分支要刪除
git branch -d feature-scan
可是,git提示,這個分支沒有合併,要強行刪除,須要使用命令、
git branch -D featuren-scan