git分支管理的策略和冲突问题
2020-07-15 20:56
375 查看
目录
备注:
本文参考于廖雪峰老师的博客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 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用
<<<<<<<
、=======
、>>>>>>>
标记出不同分支的内容,我们修改如下后保存
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" dev Merge 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 ad8 file * 3033dda add a readme file
分支策略
实际开发中,分支管理应按照以下几点:
master分支是稳定分支,用来发布最新稳定版本,开发中不需要修改它开发中尽量在
dev中开发,扩展新功能、修复bug等,等到正式版发布时,在将dev分支合并到master上。开发人员在
dev分支上开发,每个人都有自己的分支,并且往dev分支上合并。
相关文章推荐
- Git解决分支冲突及分支管理策略
- Git教程----5.0分支管理 5.1创建与合并分支 5.2解决冲突 5.3分支管理策略 5.4Bug分支 5.5Feature分支 5.6多人协作
- Git学习系列(六)解决分支冲突及分支管理策略
- Git分支管理策略
- Git分支管理策略
- Git 学习笔记 - 13 - 分支管理策略
- Git分支管理策略
- Git 分支管理与冲突解决
- Git分支管理策略
- git--分支管理策略
- 四、git学习之——分支管理、解决冲突
- 浅谈Git分支管理策略
- Git初体验(6)-分支的冲突、管理、Bug、feature和多人协作
- git分支管理策略以及常用术语
- git分支的管理策略最佳实践
- GIT 分支管理:创建与合并分支、解决合并冲突
- Git基础之(十四)——分支管理——解决冲突
- Git分支管理策略
- git图形化工具GitKraken的使用——分支管理策略
- Git分支管理的策略梳理