Watch at Ease看见世界,读懂生活。

科技 · 实用指南

Git 提示未跟踪文件会被合并覆盖?先保存并逐路径分类

把拒绝合并视为安全边界:复制报错列出的路径,核实上游跟踪与本地忽略状态,再在定向清理前选择可逆移动或暂存。

原创插画:合并闸门阻止两个路径碰撞,操作外保留受保护备份。
原创插画:该拒绝是安全边界,修改工作树前先复制报错列出的本地路径。 Watch at Ease

当写入上游已跟踪路径会覆盖当前索引无法安全代表的本地路径时,Git 会停止 merge、pull 或 checkout。这个拒绝是在保护字节,并不说明本地文件可以删除,也不说明存在适合所有情况的一条命令。

先为报错列出的每个路径建立证据表。在工作树外保存原字节,判断当前状态与上游身份,再决定移动、stash、纳入版本控制、定向 clean 或交由所有者处理。

1. 停止操作并保存报错路径

在运行 reset、checkout、clean、pull 或再次 merge 前,复制完整错误和路径清单。记录 git status --short --untracked-files=all、当前分支和 HEAD、失败命令及准备集成的目标。

在工作树外复制每个路径;重要文件同时记录权限和校验值。检查嵌套 .git、密钥、生成产物、本地配置或不可替代工作。备份让判断可逆,但不意味着可以公开敏感文件。

2. 逐路径核实本地状态与上游归属

从仓库顶层使用 git ls-files --error-unmatch 检查当前跟踪,--others --exclude-standard 列普通未跟踪项,加入 --ignored 查看被忽略项;git check-ignore -v 可指出规则来源。

fetch 后用 git ls-tree -r --name-only <target> -- path 检查目标提交是否拥有该名称。文件与目录冲突、大小写差异、稀疏检出、子模块和嵌套仓库要单独处理。

3. 选择可逆的保存分支

本地路径有价值但只应保留在本机时,把原件移出工作树,让上游文件落位后再人工整合。若应纳入版本控制,先确认所有权并检查密钥,再在合适分支提交;不要仅为消除报错制造临时提交。

普通 git stash 不承诺包含未跟踪路径。--include-untracked 会加入未跟踪文件;--all 还会加入 ignored 文件并清理工作树。用说明性消息检查 stash,确认恢复前优先 apply 而不是 pop。

4. 只对已证明可丢弃的路径使用 clean

git clean 删除未跟踪内容。先对精确 pathspec 运行 git clean -n,逐项阅读。-d 进入未跟踪目录,-x 包含 ignored 文件,-X 只删除 ignored 文件;这些选项不能互换。

Git 的 force 和嵌套仓库保护不是数据分类系统。不要因为 dry-run 看起来熟悉就执行宽泛的 git clean -fdx。先保留有价值的字节,再对每个目标作明确决定。

5. 重试原操作并验证边界

移动、暂存或有意删除冲突名称后,只重试一次原 merge、pull 或 checkout。核对期望提交,逐路径恢复本地内容并运行项目检查,全部验证前不要删除备份。

我们的 Git 2.39.2 隔离夹具重现了同一路径的本地未跟踪文件与上游跟踪文件碰撞;merge 停止且校验值不变。它没有覆盖稀疏检出、大小写折叠、子模块、嵌套仓库、Git LFS、IDE、CI 或密钥管理。

原创插画:合并前把有价值、被忽略或生成、以及上游跟踪的路径分组。
原创插画:逐路径分类、保留原字节,再在任何定向清理前选择可逆方案。 Watch at Ease