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

为什么git merge会忽略已删除文件?能否强制执行源分支的文件删除?

问题原因

-Xtheirs仅为递归合并策略的冲突解决选项,仅在出现内容冲突时优先选择main分支的内容,无冲突的文件删除操作不属于该选项的覆盖范围。
本地运行正常、GitHub Action运行异常的核心原因是:GitHub Action默认的actions/checkout为浅克隆模式,仅拉取最新1个提交,Git缺少足够的提交历史判断两个分支的分叉变更点,无法识别main分支的删除操作。

解决方案

第一步:修复CI环境的代码拉取配置

调整workflow中的checkout步骤,拉取全量提交历史,保证Git可以正常识别分支间的变更:

- uses: actions/checkout@v4
  with:
    fetch-depth: 0

第二步:调整合并命令确保删除操作同步

如果拉取全量历史后仍存在删除不同步的问题,在原有合并命令执行后新增同步删除的步骤即可:

# 执行原有合并逻辑
git merge --no-commit -s recursive -Xtheirs main
# 批量删除所有main分支已删除的文件
git diff --name-only --diff-filter=D main | xargs -r git rm
# 提交合并结果
git commit -m "Merge main to release, sync all deletions"

如果你的release分支不需要保留任何独立于main的修改,完全跟随main分支更新,可以用更稳定的全量同步方案,不会出现任何变更遗漏:

# 先执行ours合并,仅保留合并提交记录,不修改文件
git merge -s ours --no-commit main
# 将当前分支的文件树完全重置为和main分支一致
git read-tree -u --reset main
# 提交合并结果
git commit -m "Fully sync release with latest main"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:09:03