Git状态显示文件在本地被删除,即使它没有被删除



我在我的工作树上看到一个被删除的本地文件,这让我发疯了。下面是发生的事情:

我将远程repo克隆到我的本地机器上:

git clone <my repo>

签出master并查看其状态

git checkout master
git status

尽管我什么也没做,我看到这个文件从我的本地机器上删除了

On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted:    xyz.PNG
no changes added to commit (use "git add" and/or "git commit -a")

我可以在远程回购中看到这个文件。当然,如果我这样做:

git reset --hard HEAD
or
git checkout .

文件显示回来,状态又恢复为干净。

On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

但是如果我签出其他分支,然后再次切换回master,则删除消息再次出现。就好像每次我切换到master时,都有什么东西在从我的本地删除这个特定的文件,但我不知道那是什么。

我已经查看了未分级更改显示文件为删除,即使它存在文件名中似乎没有空格(文件名周围没有引号):

git status --short
D xyz.PNG 

This:

(文件实际上从树中消失,直到我做一个git重置)

是最重要的项。这意味着当Git说文件被删除时,它并没有说谎,但是删除不是为了提交而进行的。D xyz.PNG(注意这里的D之前有一个前导空格)作为一个短状态意味着同样的事情:文件神秘地从工作树中消失了。(注意,如果你自己删除了它,这并不神秘:这是意料之中的。)

第二个最重要的是你的工作树只是一组普通的目录和文件(文件夹和文件,如果你喜欢"文件夹"术语)在你的电脑上。这意味着你电脑上的其他任何东西都可以参与飞车射击并完全取出文件,想必这就是正在发生的事情。如果git checkout最初未能检出文件,Git应该注意到这一点并提出投诉。没有任何抱怨,这意味着git checkout是成功的,并将普通文件放入计算机上的普通目录中。一定是别的东西把它移走了。

你的任务,如果你选择接受它,就是找出这个"东西"是什么。。它不是Git。(是某种杀毒软件吗?如果是这样,为什么以后的重置或签出没有得到同样的处理?您是否将您的工作树存储在共享或云同步的位置?)

最新更新