我在 macOS 上使用 VS code + git 版本 2.20.1。有时,当我切换分支时,其他分支的文件会错误地保留在当前分支中。
这些文件不存在于
.gitignore
中,并且它们不是未提交的更改。
例如,如果我有这些提交的文件:
如果我在 VS Code 中签出
branch_a
,我会提交所有更改,然后切换到 branch_b
,我的工作目录中仍然有 file1
。
奇怪的是,
file1
对于 git 来说是“不可见的”。事实上,这不被认为是对 branch_b
的潜在改变。即使它实际上位于文件系统上,也会被忽略。让我从命令行的角度来澄清这一点。
$ [git: branch_a] ls
file1 file2
$ [git: branch_a] git status
nothing to commit, working tree clean
$ git checkout branch_b
Switched to branch 'branch_b'
Your branch is up to date with 'origin/branch_b'.
$ [git: branch_b] ls
file1 file2
但是,
file1
不应该在这里,但是……
$ [git: branch_b] git status
nothing to commit, working tree clean
工作树被认为是干净的,即使我
rm
或修改文件,git也不会检测到任何更改:
$ [git: branch_b] rm file1
$ [git: branch_b] ls
file2
$ [git: branch_b] git status
nothing to commit, working tree clean
这个问题不是系统性的,只是偶尔发生。 在此 SO 问题中报告了类似的问题,它似乎与 VS Code(或其他代码编辑器)管理的一种锁有关
我想知道是否有办法避免这种行为,因此我是否可以避免使用
git reset --hard
+ git clean -f -d
清理过时的文件。
你有什么解决办法吗?我也面临着同样的问题:(
在转移到其他分支之前,请确保您已经提交了一个分支中的所有文件,然后其他分支的文件将不会反映在当前分支中。