git学习4:分支管理
每次提交,Git都把它們串成一條時(shí)間線,這條時(shí)間線就是一個(gè)分支。截止到目前,只有一條時(shí)間線,這個(gè)分支叫主分支,即master分支,HEAD指向master,master指向提交,所以,HEAD指向的就是當(dāng)前分支。每次提交,master分支都會(huì)向前移動(dòng)一步,這樣,隨著你不斷提交,master分支的線也越來越長(zhǎng)。
當(dāng)我們創(chuàng)建新的分支dev時(shí),git新建了一個(gè)指針叫dev,指向master相同的提交,同時(shí)把HEAD指向dev,就表示當(dāng)前分支在dev上,不過,從現(xiàn)在開始,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后,dev指針往前移動(dòng)一步,而master指針不變,假如我們?cè)赿ev上的工作完成了,就可以把dev合并到master上。最簡(jiǎn)單的合并方法,就是直接把master指向dev的當(dāng)前提交,就完成了合并。合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支
?
首先,創(chuàng)建dev分支并切換到該分支,
git checkout -b dev
解釋:-b表示創(chuàng)建并切換,
相當(dāng)于兩條命令:
git branch dev
git checkout dev
可以用命令git branch查看當(dāng)前分支,會(huì)列出所有分支,在當(dāng)前分支前標(biāo)一個(gè)*號(hào)。
此時(shí)對(duì)readme.txt做修改,然后提交
git add readme.txt
git commit -m 'branch test'
現(xiàn)在切換回到master分支
git checkout master
查看readme文件,發(fā)現(xiàn)剛才添加的內(nèi)容不見了,這是因?yàn)槟莻€(gè)提交是在dev分支上,而不再當(dāng)前的master分支上。
這時(shí)把dev分支的修改合并到master上
git merge dev
用于合并指定分支到當(dāng)前分支上,
合并后,再查看readme文件,添加的內(nèi)容出現(xiàn)了。
這時(shí)就可以刪除dev分支了,
git branch -d dev
刪除后,查看branch
git branch
只剩下master分支了。
?
沖突解決:
1,創(chuàng)建并切換dev分支
git checkout -v dev
修改readme文件,然后添加到暫存區(qū),再提交新的commit。
2,切換回master,
git checkout master
修改readme文件,然后添加到暫存區(qū),再提交新的commit。
master分支和dev分支各自都分別有新的提交,這種情況下,Git無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,但這種合并就可能會(huì)有沖突,
?git merge dev
果然出現(xiàn)沖突信息,顯示合并失敗。
git status也可以告訴我們沖突的文件,
我們可以直接查看readme.txt的內(nèi)容:
Git用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容,我們修改readme.txt后保存
然后添加到暫存區(qū),再提交新的commit,,
合并后,用git log查看分支歷史,
git log --graph --pretty=online --abbrev-commit
最后,刪除dev分支:
git branch -d dev
?
一般分支進(jìn)行合并時(shí),git會(huì)采用Fast Forward模式,但這種模式有弊端,就是刪除分支后,會(huì)丟掉分支信息。如果要強(qiáng)制禁用Fast forward模式,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看出分支信息。
創(chuàng)建并切換dev分支
git checkout -v dev
修改readme文件,然后添加到暫存區(qū),再提交新的commit。
現(xiàn)在,我們切換回master:
git checkout master
準(zhǔn)備合并dev分支,請(qǐng)注意--no-ff參數(shù),表示禁用Fast forward:
git merge --no-ff -m 'merge with no-ff' dev
合并后,我們用git log看看分支歷史:
git log --graph --pretty=oneline --abbrev-commit
分支管理原則:master分支應(yīng)該是非常穩(wěn)定的,即僅僅用來發(fā)布新版本。平時(shí)在dev分支上進(jìn)行試驗(yàn),時(shí)不時(shí)分之合并即可。
?
假設(shè)當(dāng)前在dev分支上進(jìn)行工作,但是需要馬上修復(fù)bug,如何處理呢?
由于dev的工作還未完成,所以不能提交,
1,使用git ?stash命令,把當(dāng)前的工作現(xiàn)場(chǎng)儲(chǔ)存起來,等恢復(fù)現(xiàn)場(chǎng)之后繼續(xù)工作。
git ?stash
2,假設(shè)bug在master分支上,從master創(chuàng)建臨時(shí)分支
git checkout master
git checkout -b ?issue-101
3,修改bug,然后添加到暫存區(qū),并提交
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,查看工作現(xiàn)場(chǎng)
git stash list
7,恢復(fù)工作線程
git stash pop
恢復(fù)的同時(shí)也把stash內(nèi)容刪除了
?
軟件開發(fā)中,每添加一個(gè)功能,最好新建一個(gè)feature分支,完成后合并,最后刪除該feature分支。
假如,開發(fā)代號(hào)為scan的新功能:
1,增加并切換到新分支上,
git checkout -b feature-sacan
2,開發(fā)完畢,增加到暫存區(qū),并提交
git add scan.py
git commit -m 'develop new function'
3,切換到dev分支,
git checkout dev
4,合并和bug分支的合并類似,合并后刪除。
或者因某些原因,這個(gè)分支要?jiǎng)h除
git branch -d feature-scan
但是,git提示,這個(gè)分支沒有合并,要強(qiáng)行刪除,需要使用命令、
git branch -D featuren-scan
?
轉(zhuǎn)載于:https://www.cnblogs.com/Nick-M/p/4605528.html
總結(jié)
以上是生活随笔為你收集整理的git学习4:分支管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人局部避障的动态窗口法(dynami
- 下一篇: Cocos2D-x工程目录介绍