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

Git合并Dev到Master分支时,忽略指定跟踪文件失败求助

问题

我有两个分支:dev和master。dev分支中有一个我不希望出现在master分支中的文件,但仍需对其进行跟踪。不过我无法让Git在从dev合并到master时忽略该文件。

我使用两台机器,一台用于向dev分支提交代码,另一台用于执行合并操作。我的操作步骤如下:

  1. 机器1:创建并推送.gitattributes文件
    创建包含以下内容的.gitattributes文件:
path/to/file.py merge=ignore

提交文件:

git add .gitattributes
git commit -m "adding .gitattributes"
git push
  1. 机器2:执行合并操作
git config --global merge.ignore.driver true
git pull
git checkout master
git merge dev
# 该文件既不在master也不在dev中,将在下一步提交
ls path/to/file.py
# ls: cannot access 'path/to/file.py': No such file or directory
  1. 机器1:提交需在合并时忽略的文件
git add path/to/file.py
git commit -m "adding file.py"
git push
  1. 机器2:尽管配置了.gitattributes,git merge仍未忽略file.py
git merge dev --no-commit
# 文件未被忽略,已准备好合并到master...
ls path/to/file.py
# path/to/file.py

我哪里操作错了?

编辑:有回答指出这是重复问题,但我实际操作和该方法一致却未生效,因此继续寻求解决方案。另外,提到的Git钩子不具备跨平台性(仓库同时被Windows和Mac用户使用)。


解决方案

问题出在merge=ignore驱动的配置上,你之前用true作为驱动命令完全无效。这个驱动的核心是告诉Git:合并指定文件时,保留当前分支(master)的版本状态,而非直接"忽略"文件。正确的驱动配置需要明确执行保留操作的命令。

正确操作步骤

  1. 重新配置merge.ignore驱动(所有执行合并的机器都要做)
    替换之前的true命令,用以下配置:

    git config --global merge.ignore.driver "echo 'Ignoring merge for %P' >&2; exit 0"
    

    这个命令会在触发文件合并时输出提示,同时返回成功状态,让Git认为合并已完成,从而保留当前分支(master)的文件状态——如果master原本没有该文件,就不会将dev的文件合并进来。

  2. 确保.gitattributes同步到位
    在机器2切换到master分支后,先拉取最新代码,确认.gitattributes文件存在且配置正确:

    git checkout master
    git pull origin master
    cat .gitattributes
    # 需能看到一行:path/to/file.py merge=ignore
    
  3. 重新执行合并
    现在再执行合并操作:

    git merge dev
    

    此时Git会跳过path/to/file.py的合并流程,master分支中不会出现这个文件。

额外注意事项

  • 如果master分支之前存在过该文件,需要先在master上删除它并提交,之后合并dev时驱动才会生效保留"删除"状态。
  • 这个方案是跨平台的,Windows和Mac用户通过Git Bash或系统终端都能正常执行配置命令,无需担心兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:47:01