为何Git Windows 2.17.0出现拒绝合并无关历史错误,Linux 2.7.4却无此问题?
嘿,我来帮你理清楚这个问题的来龙去脉:
首先,这个错误的核心逻辑很简单:当你尝试合并两个完全没有共同祖先提交的Git历史时,Git会拒绝这次合并。因为它找不到这两个分支之间的关联点,默认情况下不会随便把完全独立的历史混在一起,避免意外操作。
你的场景里为什么会触发这个错误?
结合你的操作步骤,大概率是操作顺序的细微偏差导致了本地和远程历史完全脱节:
我猜实际流程应该是这样的(可能你描述的时候顺序有点小误差):
- GitLab上新建空仓库后,用户1先clone了仓库,创建并提交了
file1.cpp,但还没推送到远程; - 这时候用户2也clone了这个空仓库(本地完全没有提交记录),接着创建并提交了
file2.cpp; - 之后用户1把自己的提交推送到了远程仓库;
- 用户2执行
git pull时,远程的master分支已经有了用户1的独立提交历史,而本地的master是自己的file2.cpp提交历史——这俩完全没有共同的根提交,属于毫无关联的两条历史线,所以触发了错误。
为什么Windows和Linux上的Git表现不一样?
这才是关键——Git版本的默认行为发生了变化:
- 你Windows上用的是Git 2.17.0,属于Git 2.9.0及以上版本:Git在2.9.0版本新增了
pull.allowUnrelatedHistories这个配置项,并且默认把它设为false。也就是说,从这个版本开始,Git默认拒绝合并无关历史,直接抛出你看到的错误。 - 你Linux上的Git 2.7.4是2.9.0之前的版本:这个时候还没有这个配置项,Git默认允许合并完全独立的历史分支。所以执行
pull时,它会尝试自动把两个独立历史合并在一起,不会报错。
可以自己验证一下
你可以在两个环境里分别跑这个命令看看:
git config --get pull.allowUnrelatedHistories
- Windows的Git会返回
false(如果没手动改过的话),明确说明默认拒绝无关历史合并; - Linux的Git会提示这个配置项不存在,说明它沿用旧的默认规则——允许合并。
内容的提问来源于stack exchange,提问作者Bob5421
相关产品推荐
相关产品推荐

