Какие изменения git diffотображаются в файле? В Windows я видел проблемы с окончанием строк, вызывающие подобные проблемы. В этом случае посмотрите, какие настройки у вас есть, git config core.autocrlfиgit config core.safecrlf . Здесь есть некоторая документация по этим настройкам .
Я бы сказал, если вы используете git svn для интеграции с Subversion, убедитесь, что autocrlfон выключен. Насколько я могу судить, в этой конфигурации он просто сломан, и это заставляет большинство инструментов думать, что файлы были изменены, когда вы сделали, checkoutчтобы отменить любые изменения.
Если вы видите проблему там, где это есть git checkout, а затем git statusпоказывает, что файл все еще изменен, иgit diff показывает, что файл изменен в каждой строке файла, то это проблема, которую вы наблюдаете.
core.autocrlf
Если true, заставляет git преобразовывать CRLF в конце строк в текстовых файлах в LF при чтении из файловой системы и преобразовывать в обратном порядке при записи в файловую систему. Переменная может быть установлена на ввод, и в этом случае преобразование происходит только при чтении из файловой системы, но файлы записываются с LF в конце строк. В настоящее время решение о том, какие пути считать «текстовыми» (т.е. подвергнуться механизму autocrlf), определяется исключительно на основе содержимого.
core.safecrlf
Если true, заставляет git проверять, является ли преобразование CRLF под управлением core.autocrlf обратимым. Git проверит, изменяет ли команда файл в рабочем дереве прямо или косвенно. Например, фиксация файла с последующим извлечением того же файла должна привести к появлению исходного файла в дереве работы. Если это не так для текущей настройки core.autocrlf, git отклонит файл. Переменной можно присвоить значение «предупреждать», и в этом случае git будет предупреждать только о необратимом преобразовании, но продолжит операцию. ...
git checkout HEAD -- index.htmРаботает ли (извлечение из последнего зафиксированного состояния вместо извлечения из индекса)?