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

Git如何自动合并同一文件中的非冲突并行变更?

解决Git并行更新JSON文件的冲突问题

问题原因

虽然两个组件修改的是versions.json的不同节点,但Git默认合并策略可能因JSON格式的换行、逗号等细节识别为冲突,再加上CI流水线并行执行的竞争条件,容易出现rebase失败的情况。

自动化解决方案

1. 自定义JSON合并驱动(最可靠)

利用jq工具专门处理JSON文件的合并,让Git自动解决冲突:

  • 在仓库根目录创建.gitattributes文件,添加规则:
    versions.json merge=json-merge
    
  • 配置Git的合并驱动(CI环境需提前安装jq):
    git config merge.json-merge.driver 'jq -s ".[0] * .[1]" %A %B > %A'
    
    这个驱动会将本地版本(%A)和远程版本(%B)的JSON对象合并,完整保留双方对不同节点的修改,无需人工干预。

2. 带合并策略的Rebase命令

在执行rebase时指定合并策略选项,强制Git自动合并非重叠的修改:
将CI流程中的git pull --rebase替换为:

git pull --rebase -X theirs

-X theirs参数会让Git在遇到冲突时,自动结合远程分支的修改与本地的非重叠修改,适配不同组件修改不同节点的场景。

3. 循环重试+自动冲突解决

针对竞争条件导致的偶发失败,用脚本循环执行rebase和push,失败时自动合并冲突:

#!/bin/bash
set -e

# 先完成修改文件、提交变更的步骤...

# 循环尝试rebase和push
while true; do
  if git pull --rebase; then
    git push
    break
  else
    # 用jq自动合并冲突的JSON文件
    jq -s ".[0] * .[1]" versions.json .git/rebase-apply/versions.json > versions.json
    git add versions.json
    git rebase --continue
  fi
done

这个脚本会在rebase失败时自动合并本地与远程的JSON修改,继续rebase流程,直到push成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:30