Git: удалить полностью несуществующий файл из скважины, откуда я не знаю

Я использую git в Windows. Я один раз добавил файл, потом поменял букву в верхнем регистре, снова добавил с новым именем. С тех пор у меня всегда было два файла (один раз в верхнем регистре, один нет).

 myFile.ext
 myfile.ext

Git всегда интерпретировал его как два разных файла (поскольку он был настроен с учетом регистра), но на самом деле это был один и тот же файл, поэтому он отслеживал этот файл два раза, по одному разу под каждым именем.

Теперь я удалил файл верхнего регистра из репо с помощью

git rm --cached myFile.ext

Так что теперь у меня есть только одна дорожка моего файла, и это все хорошо.

 myfile.ext

Проблема в том, что если я хочу проверить старый коммит, git говорит:

ошибка: Следующие неотслеживаемые рабочие файлы дерева будут перезаписаны при проверке: myFile.ext Пожалуйста, переместите или удалите их, прежде чем вы сможете переключать ветки. Прерывание

Однако я ничего не могу сделать с этим файлом, потому что его нет ни в рабочем дереве, ни в индексе. Я пытался переместить файл, удалить файл myfile.ext и добавить его снова, спрятать, но ничего не получилось. myFile.ext не отображается в git status и не находится в gitignore.

Как я могу это решить?


person Oswin    schedule 09.04.2015    source источник
comment
Попробуйте использовать git clean, подробности здесь: stackoverflow.com/questions/4858047/   -  person demonplus    schedule 09.04.2015
comment
Каков ваш параметр конфигурации core.ignorecase?   -  person Edward Thomson    schedule 09.04.2015
comment
Попробуйте git clean -fd принудительно удалить неотслеживаемые файлы.   -  person Mayur Nagekar    schedule 09.04.2015
comment
core.ignorecase = false, но только недавно, после того, как я добавил файлы. Чистка разными вариантами проблему не решила. На самом деле я могу проверить форсирование с помощью -f, но это не долгосрочное решение, ошибка сохраняется.   -  person Oswin    schedule 10.04.2015


Ответы (1)


Возможно, лучше всего удалить myFile.ext из вашей истории с помощью такой команды:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch myFile.ext' HEAD
person Yves Blusseau    schedule 10.04.2015