git 合并冲突_git分支管理的策略和冲突问题
備注:
知識點
關于分支中的沖突
分支管理的策略
分支策略
備注:
本文參考于廖雪峰老師的博客Git教程。依照其博客進行學習和記錄,感謝其無私分享,也歡迎各位查看原文。
知識點
git log --graph --pretty=oneline --abbrev-commit查看分支合并情況
git log --graph查看分支合并圖
當兩個分支修改同一個文件時,可能發(fā)生兩個分支不能自動合并的問題,需要手動解決沖突(合并時,Git將沖突標識了出來),然后再次提交,即可完成合并。
使用參數--no-ff禁用快合并模式,git merge --no-ff -m"merge with no-ff" dev,合并
關于分支中的沖突
如下,新建一個分支dev2,并且在新分支上開發(fā):
$ git checkout -b dev2切換到一個新分支 'dev2'
修改readme.txt,添加一行。
Creating a new branch is quick AND simple.- 在dev2分支進行提交,
$ git commit -m"add new line at readme on dev2"
[dev2 4a097db] add new line at readme on dev2
1 file changed, 1 insertion(+)
- 切換到master分支,同時在master上修改readme文件(添加域dev2分支上文件不同的內容,Creating a new branch is quick & simple.),并且提交
切換到分支 'master'
您的分支領先 'origin/master' 共 1 個提交。
(使用 "git push" 來發(fā)布您的本地提交)
$ git add readme.txt
$ git commit -m"add new line at readme on master"
[master d562bf7] add new line at readme on master
1 file changed, 1 insertion(+)
如上,Git會自動提示當前master分支比遠程origin/master分支領先一個提交
現在master分支和dev2 分支都有了各自新的提交,在這種情況下,Git無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,由于同時都修改了同一行內容,此時會有沖突。
$ git merge dev2自動合并 readme.txt
沖突(內容):合并沖突于 readme.txt
自動合并失敗,修正沖突然后提交修正的結果。
Git提示自動合并存在沖突,沖突文件是readme,需要修正沖突然后提交修正后的結果
如果用git status查看看當前狀態(tài)
$ git status位于分支 master
您的分支領先 'origin/master' 共 2 個提交。
(使用 "git push" 來發(fā)布您的本地提交)
您有尚未合并的路徑。
(解決沖突并運行 "git commit")
未合并的路徑:
(使用 "git add ..." 標記解決方案)
雙方修改:readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
如上,提示雙方修改
- 查看readme.txt的內容
`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
create two new branch
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev2
- Git用<<<<<<<、=======、>>>>>>>標記出不同分支的內容,我們修改如下后保存
- 修改沖突后提交
$ git commit -m"conflict fixed"
[master 8f69de8] conflict fixed
Git提示沖突已經修復,現在master和dev2分支均指向了現在工作區(qū)的狀態(tài)。
- 使用git log --graph --pretty=oneline --abbrev-commit可以查看分支的合并情況
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file
如上,分支合并和沖突記錄
- 此時可以刪除dev2分支
已刪除分支 dev2(曾為 4a097db)。
沖突解決完成
分支管理的策略
通常,合并分支時Git使用Fast forward模式快速合并。但是快速模式刪除分支,會丟失分支信息。
強制禁用Fast forward模式,Git會將merge記錄為一個新的提交,同時分支歷史會記錄分支信息。
- 切換到dev分支,并修改readme文件,同時提交commit
切換到一個新分支 'dev'
$ git add readme.txt
$ git commit -m"a new branch"
[dev 44dffc0] a new branch
1 file changed, 1 insertion(+)
- 切換到master分支
切換到分支 'master'
您的分支領先 'origin/master' 共 4 個提交。
(使用 "git push" 來發(fā)布您的本地提交)
- 使用--no-ff參數合并分支dev到當前master,本次合并要創(chuàng)建一個新的commit,所以加上-m參數描述
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
- 使用git log查看分支合并圖
* 7c4d427 merge with no-ff
|\
| * 44dffc0 a new branch
|/
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file
分支策略
實際開發(fā)中,分支管理應按照以下幾點:
master分支是穩(wěn)定分支,用來發(fā)布最新穩(wěn)定版本,開發(fā)中不需要修改它
開發(fā)中盡量在dev中開發(fā),擴展新功能、修復bug等,等到正式版發(fā)布時,在將dev分支合并到master上。
開發(fā)人員在dev分支上開發(fā),每個人都有自己的分支,并且往dev分支上合并。
參考
Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000總結
以上是生活随笔為你收集整理的git 合并冲突_git分支管理的策略和冲突问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python参数_python参数的介绍
- 下一篇: hash地址_一致性Hash在负载均衡中