You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复跨平台Git本地仓库与GitHub主分支的版本冲突?

问题场景名称及解决方法

专业术语

  1. 分支分叉(Divergent Branches):你的本地main分支与远程origin/main分支出现提交历史分叉——本地有1个未推送的独立提交,远程有8个本地没有的新提交,两者提交历史不再线性统一。
  2. 合并冲突(Merge Conflicts):拉取远程分支时Git无法自动合并两端对同一文件的修改,具体分为两种类型:
    • CONFLICT (add/add):两端都添加了同一文件(或同一文件的同一区块),Git无法自动判断保留哪一方内容
    • CONFLICT (content):同一文件的内容被两端修改且修改范围重叠,Git无法自动合并

解决方法

不推荐的简单方法:删除本地仓库重新克隆

这确实是操作最简便的方式,但缺点明显:会丢失本地未提交的工作区变更、仓库自定义配置,以及未推送的本地提交(若这些内容有价值)。仅适用于本地无重要内容的场景。

更优的保留本地变更方法(推荐)

方法1:合并方式(保留分叉历史)

若不介意提交历史出现合并节点,可按以下步骤操作:

  1. 手动解决冲突文件:
    打开.gitignore和assertions/assertions.v,找到冲突标记<<<<<<<(本地内容)、=======(远程内容)、>>>>>>>,编辑保留需要的内容后删除标记
  2. 标记冲突已解决:
    git add .gitignore assertions/assertions.v
    
  3. 完成合并提交:
    git commit
    
    Git会自动生成合并提交信息,确认后即可完成,之后执行git push同步本地变更到远程。

方法2:变基方式(保持线性提交历史)

若希望提交历史保持线性,推荐用变基代替合并:

  1. 取消当前合并状态(若处于冲突未解决状态):
    git merge --abort
    
  2. 执行变基拉取:
    git pull --rebase
    
    Git会将本地的1个提交“移动”到远程8个提交之后,若出现冲突:
    • 手动解决冲突文件(同方法1)
    • 标记冲突已解决:git add .gitignore assertions/assertions.v
    • 继续变基:git rebase --continue
  3. 变基完成后推送本地变更:
    git push
    

额外说明

执行git mergetool --tool=vimdiff提示“No files need merging”,是因为当时处于分支分叉但未触发合并操作的状态,无待合并的冲突文件。后续配置pull.rebase false触发合并后,才出现了实际冲突内容。

内容的提问来源于stack exchange,提问作者Scooter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:55:25