git未跟踪文件通过合并覆盖错误的解决方法

错误背景

在开发标注平台系统的时候,项目原同事将dubbo的注册缓存通过配置项<dubbo:registry file="./data-web-registry.properties" ... />的方式将其放在项目根目录,在 IDEA 中运行项目,每次都会生成该文件,导致项目目录有点乱,于是将其改变,放在当前用户目录的.dubbo-registry目录,且隐藏起来,减少人为操作引起的 RPC 调用问题。

经过这么已改造,保存项目并提交到 git 仓库,其他同事拉取项目之后,提交时出现如下错误:

error: The following untracked working tree files would be overwritten by merge:
     ~/.dubbo-registry/data-web-registry.properties
     ~/.dubbo-registry/data-web-registry.properties.lock
Please move or remove them before you merge.
Aborting

解决办法

遇到这种问题,在项目目录下,执行git clean -d -fx "xxx.yy" 命令来删除 xxx.yy 文件的缓冲,注意,有几个文件有问题则需要清除几个。

git clean -d -fx "~/.dubbo-registry/data-web-registry.properties"
git clean -d -fx "~/.dubbo-registry/data-web-registry.properties.lock"

执行命令后,会显示下面的结果:

Removing ~/.dubbo-registry/data-web-registry.properties

git clean

如果想批量删除分支(branch)中新加的文件(untracked files),你可能会想到 git reset --hard命令,但可以告诉是不行的,因为git reset --hard适用于git commit到本地分支但没有git push到远程的场景。遇到要删除 untracked files 的问题,我们可以有以下几步操作。

  • 首先确认要删除的文件:git clean -fd -n
  • 如果以上命令给出的文件列表是你想删除的, 那么接下来执行:git clean -f -d或者git clean -fd就可以了。
    • -f表示删除文件;
    • -d表示删除目录;
    • -x表示还要删除 .gitignore 中的文件。
  • 如果git submodule中也存在需要删除的文件那么需要再加个-f, 变成git clean -dff

下面是几个常用的情景:

# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 .gitignore 的 untrack 文件/目录也一起删掉
git clean -xfd
# 在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

点击量:3

发表评论