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

Git合并不同行修改触发冲突如何自动生成预期合并结果

解决方案

你可以通过自定义Git合并驱动实现自动合并这类占位行修改的场景,具体操作步骤如下:

方案一:自定义合并驱动(长期适配同类场景)

步骤1:编写合并逻辑脚本

创建名为git-merge-placeholder的可执行脚本,逻辑为按占位行位置优先取两个分支的修改值:

#!/bin/bash
# 参数含义:%O=base版本(master原始内容) %A=当前分支版本 %B=待合并分支版本
BASE=$1
OURS=$2
THEIRS=$3

# 临时存储输出内容
> "$OURS.tmp"

# 按行遍历base的每一个占位位置
paste "$BASE" "$OURS" "$THEIRS" | while IFS=$'\t' read -r base_line our_line their_line; do
    if [ "$our_line" != "$base_line" ]; then
        # 当前分支修改了该占位,优先用当前分支的值
        echo "$our_line" >> "$OURS.tmp"
    elif [ "$their_line" != "$base_line" ]; then
        # 待合并分支修改了该占位,用待合并分支的值
        echo "$their_line" >> "$OURS.tmp"
    else
        # 都没修改,保留原始占位
        echo "$base_line" >> "$OURS.tmp"
    fi
done

# 替换当前分支的文件内容
mv "$OURS.tmp" "$OURS"
exit 0

将脚本放到系统PATH路径下,添加可执行权限:chmod +x git-merge-placeholder

步骤2:配置Git合并驱动

执行以下命令注册合并驱动:

git config merge.placeholder-merge.name "占位行自动合并驱动"
git config merge.placeholder-merge.driver "git-merge-placeholder %O %A %B"

步骤3:指定适配文件

在仓库根目录创建.gitattributes文件,指定对应文件使用该合并驱动:

file.txt merge=placeholder-merge

配置完成后再执行合并操作,就会自动生成A\nB的预期内容,不会触发冲突。

方案二:冲突后自动处理(适合单次脚本集成)

如果不想修改Git配置,也可以在合并脚本中加入冲突自动处理逻辑,修改你的合并步骤如下:

# 合并a分支
git merge --no-ff "a" -m "Merge A"
# 合并b分支,禁止自动提交,出现冲突不中断
git merge --no-ff --no-commit --no-abort "b" || true
# 自动处理冲突内容
grep -v -E '^(<<<<<<<|=======|>>>>>>>|UNUSED_)' file.txt > file.txt.tmp
mv file.txt.tmp file.txt
# 提交合并结果
git add file.txt
git commit -m "Merge B"

该逻辑会自动过滤冲突标记和未修改的占位行,直接生成预期合并结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:00