Я использую VS code + git version 2.20.1 на macOS. Иногда, когда я переключаюсь между ветками, файлы других ветвей ошибочно сохраняются в текущей.
Эти файлы отсутствуют в .gitignore
и не являются незафиксированными изменениями.
Например, если у меня есть эти файлы:
- branch_a: файл1, файл2
- branch_b: file2
если я извлекаю branch_a
в VS Code, я фиксирую все изменения и затем переключаюсь на branch_b
, в моем рабочем каталоге все еще есть file1
.
Как ни странно, file1
как-то "невидим" для мерзавца. Действительно, это не считается потенциальным изменением 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 (или другими редакторами кода)
Мне интересно, есть ли способ избежать такого поведения и, следовательно, если я могу избежать очистки устаревших файлов с помощью git reset --hard
+ git clean -f -d
.