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

如何在Git拉取时自动解决重命名/删除冲突并优先保留对方删除

Git合并时优先采用对方删除操作的解决方案

问题背景

在仓库目录大规模重排的场景下:

  • 日常开发在develop分支进行,develop23分支仅做git mv重排和少量git rm操作
  • 合并origin/develop到develop23时,出现CONFLICT (rename/delete)冲突:HEAD中文件被重命名,对方分支中该文件已删除
  • 使用git merge origin/develop --strategy-option theirs无法自动解决这类冲突,需要自动采用对方的删除操作

可行解决方案

1. 合并后自动清理冲突文件

执行合并命令后,显式处理所有rename/delete冲突:

# 执行合并(即使冲突也完成第一步)
git merge origin/develop --strategy-option theirs

# 筛选出rename/delete冲突的文件并删除,对应采用对方的删除操作
git diff --name-only --diff-filter=DR | xargs git rm

# 完成合并提交
git commit
  • --diff-filter=DR:筛选出被对方删除(D)且本地重命名(R)的冲突文件
  • xargs git rm:批量删除这些文件,对齐对方分支的删除操作

2. 自动化脚本(适合重复场景)

如果需要频繁处理这类合并,可以编写脚本一键完成:

#!/bin/bash
git merge origin/develop --strategy-option theirs

# 判断合并是否出现冲突
if [ $? -ne 0 ]; then
    # 自动处理rename/delete冲突
    git diff --name-only --diff-filter=DR | xargs git rm
    git commit -m "Merge origin/develop, resolve rename/delete conflicts by adopting deletions"
fi

3. 补充说明

--strategy-option theirs仅针对文件内容冲突生效,对于文件存在性的冲突(重命名/删除属于此类),Git不会自动应用该规则——因为Git认为这类操作是需要人工确认的重要变更,所以必须通过显式命令完成冲突裁决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:52:39