备注:
本文参考于廖雪峰老师的博客Git教程。按照其博客进行学习和记录,感激其自私分享,也欢送各位查看原文。
知识点
git log --graph --pretty=oneline --abbrev-commit
查看分支合并状况git log --graph
查看分支合并图- 当两个分支批改同一个文件时,可能产生两个分支不能主动合并的问题,须要手动解决抵触(合并时,Git将抵触标识了进去),而后再次提交,即可实现合并。
- 应用参数
--no-ff
禁用快合并模式,git merge --no-ff -m"merge with no-ff" dev
,合并
对于分支中的抵触
如下,新建一个分支dev2,并且在新分支上开发:
$ git checkout -b dev2切换到一个新分支 'dev2'
批改readme.txt,增加一行。
Creating a new branch is quick AND simple.
- 在dev2分支进行提交,
$ git add readme.txt$ 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.
),并且提交
git checkout master切换到分支 'master'您的分支当先 'origin/master' 共 1 个提交。 (应用 "git push" 来公布您的本地提交)
$ 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无奈执行“疾速合并”,只能试图把各自的批改合并起来,因为同时都批改了同一行内容,此时会有抵触。
$ git merge dev2主动合并 readme.txt抵触(内容):合并抵触于 readme.txt主动合并失败,修改抵触而后提交修改的后果。
Git提醒主动合并存在抵触,抵触文件是readme,须要修改抵触而后提交修改后的后果
如果用git status
查看看以后状态
$ git status位于分支 master您的分支当先 'origin/master' 共 2 个提交。 (应用 "git push" 来公布您的本地提交)您有尚未合并的门路。 (解决抵触并运行 "git commit")未合并的门路: (应用 "git add <文件>..." 标记解决方案) 单方批改: readme.txt批改尚未退出提交(应用 "git add" 和/或 "git commit -a")
如上,提醒单方批改
- 查看
readme.txt
的内容
$ cat readme.txt`this is a test that I learn and use git version control systemthis is a beginningwofaidognyixie dognxicreate two new branch<<<<<<< HEADCreating a new branch is quick & simple.=======Creating a new branch is quick AND simple.>>>>>>> dev2
- Git用
<<<<<<<
、=======
、>>>>>>>
标记出不同分支的内容,咱们批改如下后保留
Creating a new branch is quick and simple.
- 批改抵触后提交
$ git add readme.txt$ git commit -m"conflict fixed"[master 8f69de8] conflict fixed
Git提醒抵触曾经修复,当初master
和dev2
分支均指向了当初工作区的状态。
- 应用
git log --graph --pretty=oneline --abbrev-commit
能够查看分支的合并状况
$ 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分支
$ git branch -d dev2已删除分支 dev2(曾为 4a097db)。
抵触解决实现
分支治理的策略
通常,合并分支时Git应用Fast forward
模式疾速合并。然而疾速模式删除分支,会失落分支信息。
强制禁用Fast forward
模式,Git会将merge记录为一个新的提交,同时分支历史会记录分支信息。
- 切换到
dev
分支,并批改readme
文件,同时提交commit
$ git checkout -b dev切换到一个新分支 'dev'$ git add readme.txt$ git commit -m"a new branch"[dev 44dffc0] a new branch 1 file changed, 1 insertion(+)
- 切换到
master
分支
$ git checkout master切换到分支 'master'您的分支当先 'origin/master' 共 4 个提交。 (应用 "git push" 来公布您的本地提交)
- 应用
--no-ff
参数合并分支dev
到以后master
,本次合并要创立一个新的commit
,所以加上-m
参数形容
$ git merge --no-ff -m"merge with no-ff" devMerge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+)
- 应用
git log
查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit* 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
分支策略
理论开发中,分支治理应依照以下几点:
master
分支是稳固分支,用来公布最新稳固版本,开发中不须要批改它- 开发中尽量在
dev
中开发,扩大新性能、修复bug等,等到正式版公布时,在将dev
分支合并到master
上。- 开发人员在
dev
分支上开发,每个人都有本人的分支,并且往dev
分支上合并。