git学习4:分支管理
每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,這個分支叫主分支,即master分支,HEAD指向master,master指向提交,所以,HEAD指向的就是當前分支。每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。
當我們創建新的分支dev時,git新建了一個指針叫dev,指向master相同的提交,同時把HEAD指向dev,就表示當前分支在dev上,不過,從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變,假如我們在dev上的工作完成了,就可以把dev合并到master上。最簡單的合并方法,就是直接把master指向dev的當前提交,就完成了合并。合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支
?
首先,創建dev分支并切換到該分支,
git checkout -b dev
解釋:-b表示創建并切換,
相當于兩條命令:
git branch dev
git checkout dev
可以用命令git branch查看當前分支,會列出所有分支,在當前分支前標一個*號。
此時對readme.txt做修改,然后提交
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
?
轉載于:https://www.cnblogs.com/Nick-M/p/4605528.html
總結
以上是生活随笔為你收集整理的git学习4:分支管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人局部避障的动态窗口法(dynami
- 下一篇: Cocos2D-x工程目录介绍