ОК, покопавшись весь день, вот решение, которое я нашел:
========== Ситуация ==========
Я занимаюсь разработкой на своей ветке "Хотдог"
Мой сотрудник отправил свою работу в нашу главную ветку, включая файл с именем "Hamburgersrule"
Я объединяю мастера с моей веткой Hotdog.
Мой сотрудник меняет "Hamburgersrule" на "HamburgersRule" и подталкивает его к мастеру.
========== Проблема ==========
Когда я пытаюсь переключиться между Hotdog и Master, Git думает, что произошли некоторые изменения. Случай с HamburgersRule выглядит иначе, чем у Git, но Windows считает, что это нормально. Каждый раз, когда я пытаюсь слить или оформить другую ветку, Git предупреждает меня, что я потеряю свои неподготовленные файлы.
Я могу подавить сообщение, установив для git config core.ignorecase значение true, но основная проблема все еще существует, и игнорирование различий в регистрах - вот что привело нас в этот беспорядок.
========== Решение ==========
1: сделать тройное переименование на мастере (чтобы убедиться, что новое имя файла правильное)
HamburgersRule -> HamburgersRule_Rename -> HamburgersRule
2: объединить это изменение в ветку хот-дога. Чтобы слияние сработало, вам нужно удалить версию «Hamburgersrule» (используя вашу ОС, а не git)
3: Очистить оставшиеся файлы в Hotdog. Проверьте, работает ли слияние должным образом. Возможно, вам придется оформить заказ HamburgersRule из ветки Master:
git checkout master HamburgersRule
EDIT:
Важная заметка. Если вы не хотите продолжать исправлять эту проблему снова и снова, убедитесь, что все ваши коллеги имеют значение ignorecase равным false
git config core.ignorecase false
Если кто-то игнорирует чувствительность к регистру, его клиент git игнорирует изменения и продолжает проверять плохое имя.