Git问题解决方案:Pulling without specifying how to reconcile divergent branches
1 问题背景
使用git pull命令出现以下的警告文案,可以通过阅读本篇文章来解决此问题。
最近在使用git pull命令时,弹出下述的警告文案:
warning: Pulling without specifying how to reconcile divergent branches is discouraged. You can squelch this message by running one of the following commands sometime before your next pull:git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward onlyYou can replace "git config" with "git config --global" to set a default preference for all repositories. You can also pass --rebase, --no-rebase, or --ff-only on the command line to override the configured default per invocation.
该警告的中文版本文案描述如下:
warning: 不建议在没有为偏离分支指定合并策略时执行pull操作。
您可以在执行下一次pull操作之前执行下面一条命令来抑制本消息:
git config pull.rebase false # 合并(缺省策略)
git config pull.rebase true # 变基
git config pull.ff only # 仅快进
您可以将 “git config” 替换为 “git config --global” 以便为所有仓库设置
缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、–no-rebase,
或者 --ff-only 参数覆盖缺省设置。
在Git官方参考文档中查询了相关知识点,终于理清了这个问题,现在把问题产生的原因、解决方案分享给大家。
2 理解问题
2.1 理解问题的文案描述
我们在上述的警告文案描述中可以发现两个重要的Git配置信息pull.rebase和pull.ff。
pull.ff。
在《Git官方文档-参考-pull.ff》文章中可以查看到它的定义:
当把pull.ff设置为false时,这个变量告诉Git在这种情况下,如果执行不带选项的git pull命令时先尝试快进合并,如果不行再进行正常合并生成一个新的提交。
当把pull.ff设置为only时,只允许快进合并(相当于执行命令git pull --ff-only),如果执行不带选项的git pull命令时,如果不能进行快进合并则终止当前操作。
如果将pull.ff设置为only,而执行不带选项的git pull命令被终止,其实可以使用带参数的git pull --no-ff或者git pull --rebase命令来执行pull操作。
接着在《Git官方文档-参考-pull.base》文章中可查看pull.rebase的定义,但是官网的定义过于复杂,因此此处只解释当选项pull.rebase的参数为true或者false时的定义:
当pull.rebase为true时,运行不带选项的命令git pull相当于执行git pull --rebase。
当pull.rebase为false时,运行不带选项的命令git pull不会被改变含义,即不会变基。如果想变基,需要在执行命令时显式地加上选项–rebase,即git pull --rebase。
2.2 理解git pull命令的原理及其各选项的含义
2.2.1 git pull命令的原理
git fetch会查询git remote中所有的远程仓库所包含分支的最新提交,并将其记录到.git/FETCH_HEAD文件中。
.git/FETCH_HEAD是一个版本链接,指向着目前已经从远程仓库取下来的所有分支的最新提交。
git pull命令等价于:先执行git fetch,再执行git merge FETCH_HEAD将远程仓库对应分支的最新提交合并到当前本地分支中。
2.2.2 git pull命令中各选项的含义
其中git pull有这几项常见的选项搭配:
不带任何选项的git pull命令:先尝试快进合并,如果不行再进行正常合并生成一个新的提交。
git pull --ff-only命令:只尝试快进合并,如果不行则终止当前合并操作。
git pull --no-ff命令:禁止快进合并,即不管能不能快进合并,最后都会进行正常合并生成一个新的提交。
git pull --rebase命令:先尝试快进合并,如果不行再进行变基合并。
2.3 理解git pull命令出现问题的原因
现在,看完上述的问题的文案描述、git pull命令的原理及其各选项的含义后,现在我们清楚为什么git pull命令出现该警告文案的原因了:
执行不带任何选项的git pull命令时,会产生三种歧义: git pull --ff-only、git pull --no-ff、git pull --rebase,而这三种pull方式的合并策略差异很大,即对整个分布式项目的版本管理有很大的影响作用。
而我们执行不带任何选项的git pull命令时,Git就不知道我们到底想用哪种合并策略来执行git pull,因此Git会给出上述的警告文案,建议我们通过git config命令指定不带选项的git pull命令应该按照这三种合并策略的哪种来执行。
3 解决问题
现在我们再次回顾一下上述执行不带选项的git pull命令提示的警告文案:
warning: 不建议在没有为偏离分支指定合并策略时执行pull操作。
您可以在执行下一次pull操作之前执行下面一条命令来抑制本消息:
git config pull.rebase false # 合并(缺省策略)
git config pull.rebase true # 变基
git config pull.ff only # 仅快进
您可以将 “git config” 替换为 “git config --global” 以便为所有仓库设置
缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、–no-rebase,
或者 --ff-only 参数覆盖缺省设置。
首先理解什么是偏离分支:
当本地的分支落后于远程分支时,本地分支又自行修改项目文件生成了新的提交,这时本地分支再执行git pull命令就不能快进合并,并且还容易发生冲突。这时的本地分支便称为偏离分支,因为这时的本地分支的最新提交跟远程分支的最新提交不同,产生了偏离。
接着理解什么是合并策略:
合并策略便是 git merge --ff-only、git merge --no-ff、git merge --rebase这三种常见的合并策略,分别代表着快进合并、非快进普通合并、变基合并。
而我们执行不带任何选项的git pull命令时,Git就不知道我们到底想用哪种合并策略来执行git pull,因此Git会给出上述的警告文案,建议我们通过git config命令应该按照这三种合并策略的哪种来执行。
通过上述的文章讲解,现在我们理解了为什么理解git pull命令出现问题的原因,因此只要我们在Git中配置选项pull.rebase或pull.ff的参数即可。配置后,即便我们再执行不带任何选项的git pull命令,也不会再出现上述的警告文案啦。
3.1 如何配置选项pull.rebase或pull.ff的参数
博主已经在本文的《2.1 理解问题的文案描述》章节中将选项pull.rebase和pull.ff的参数的所有情况进行了一一介绍,因此具体怎么配置按照你使用Git的个人喜好即可。
例如博主喜欢在git pull时只接受快进合并和变基合并,那么博主可以执行git config pull.ff only,保证每次执行不带选项的git pull时要么快进合并成功,要么快进合并失败。如果快进合并失败,博主再显式执行git pull --rebase进行变基合并即可。
3.1.1 选项pull.rebase或pull.ff各个参数的含义
《Git官方文档-参考-pull.ff》文章中对选项pull.ff各个参数的定义:
当把pull.ff设置为false时,这个变量告诉Git在这种情况下,如果执行不带选项的git pull命令时先尝试快进合并,不行再创建一个合并后新的提交。
当把pull.ff设置为only时,只允许快进合并(相当于执行命令git pull --ff-only),如果执行不带选项的git pull命令时,不能进行快进合并则终止当前操作。
如果将pull.ff设置为only,而执行不带选项的git pull命令被终止,其实可以使用带参数的git pull --no-ff或者git pull --rebase命令来执行pull操作。
《Git官方文档-参考-pull.base》文章中pull.rebase的各个参数的定义:
当pull.rebase为true时,运行不带选项的命令git pull相当于执行git pull --rebase。
当pull.rebase为false时,运行不带选项的命令git pull不会被改变含义,即不会变基。如果想变基,需要在执行命令时显式地加上选项–rebase,即git pull --rebase。
3.2 如何保持当前的默认合并策略并阻止弹出警告文案
如果你是一个Git小白,看完我上述的文章还是没看懂什么意思,又希望你自己在执行git pull命令时,既保持当前的默认合并策略,保证不再出现配置合并策略的警告文案,那么你只需要执行git config pull.ff false即可,因为pull.ff默认是没有指定的,而没有指定的pull.ff的默认值与显式指定为false的效果一致。因此当你显式指定pull.ff后,既保持当前的默认合并策略,又能保证不再出现配置合并策略的警告文案。
另外,上述提到的默认策略便是不带任何选项的git pull命令:先尝试快进合并,如果不行再进行正常合并生成一个新的提交。
Git问题解决方案:Pulling without specifying how to reconcile divergent branches相关推荐
- git报错:(Pulling without specifying how to reconcile divergent branches)
1 问题背景 如果你也在使用2.27.0及以上版本的Git时,使用git pull命令出现以下的警告文案,可以通过阅读本篇文章来解决此问题. 博主最近在Android Studio上使用git pul ...
- git pull和git pull origin master报如下警告Pulling without specifying how to reconcile divergent branches
git pull和git pull origin master报如下警告 hint: Pulling without specifying how to reconcile divergent bra ...
- 解决git问题:fatal: Need to specify how to reconcile divergent branches.
在使用git拉取远程项目的时候可能会出现 fatal: Need to specify how to reconcile divergent branches. 如图: 解决方式: 第一步:删除该本地 ...
- VS2013中使用git发布解决方案master分支的时候出现错误
VS2013中使用git发布解决方案master分支的时候出现错误 参考文章: (1)VS2013中使用git发布解决方案master分支的时候出现错误 (2)https://www.cnblogs. ...
- 【Git】PyCharm项目关联Git的解决方案
核心操作和<IntelliJ_IDEA项目关联Git的解决方案>是一致的,毕竟都是JetBrains家的产品. 这次简明扼要地总结一下步骤(默认你已经能做到本地Git和Github关联): ...
- git冲突解决方案 Intellij IDEA
git冲突解决方案 Intellij IDEA 参考文章: (1)git冲突解决方案 Intellij IDEA (2)https://www.cnblogs.com/jtlgb/p/8616033. ...
- MAC 升级到10.14 mojave beta之后git无法使用解决方案
MAC 升级到10.14 mojave之后git无法使用解决方案 这几天google用不了只能靠百度了,首先查到原因是因为每次大版本升级之后,xcode会被卸载,而我本来就没有想xcode,又了解了一 ...
- 【Git】IDEA项目关联Git的解决方案
情况描述 我们可能会想要把在做的项目提交到GitHub上,但苦于必须每次把项目导出,commit并push到Git远程服务器上,这很麻烦,那我们能不能直接利用IDEA与Git关联起来,进而便捷地提交呢 ...
- git合并分支Pulling is not possible because you have unmerged files.
问题:目前在master分支上,执行git merge 分支A 报错error: Pulling is not possible because you have unmerged files. 解决 ...
- Git 出错error: Pulling is not possible because you have unmerged files
在git pull的过程中,如果有冲突,那么除了冲突的文件之外,其它的文件都会做为staged区的文件保存起来. 重现: $ git pull origin master error: Pulling ...
最新文章
- 基础知识——操作列表(三)
- JavaScript网站设计实践(五)编写photos.html页面,实现点击缩略图显示大图的效果...
- ExtJs Ext.panel.Panel和Ext.container.Viewport布局问题
- 神经网络波动方程∂f(x)/ ∂x=f(-x)f(x)的另一组玻色子解
- Python IDLE或Python Shell不支持中文编码的解决方案
- 第九章 常用模块(续)
- “保持耐心”,永远从用户角度出发— 专访阿里巴巴淘系技术内容中台负责人吴桂林(梁舒)...
- 国内MySQL技术现状_1024不搬砖,谈谈自己2020剩余两月的学习计划
- 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc
- unity的inputField文本框赋值问题
- 见过一些能力非常强的但创业总是失败
- 自学python需要安装什么-学Python需要安装什么软件?Python软件工具大全
- 爬虫第九式:豆瓣电影排行榜数据抓取
- detach的简易用法
- 2022数据库系统工程师 下午 真题答案
- STM32-M3(野火)SD卡读写/移植znFAT文件访问系统
- Android 优化开机启动
- 百货商城销售管理系统
- Compose学习笔记1-compose、state、flow、remember
- STM32的时钟安全系统(CSS)系统