git學習4:分支管理

每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,這個分支叫主分支,即master分支,HEAD指向mastermaster指向提交,因此,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

相關文章
相關標籤/搜索