Да , git checkout --patch
правильно работает с переводом конца строки. Патч почти наверняка не применяется, потому что у вас неправильная конфигурация.
Все в вашей команде должны использовать одинаковую конфигурацию окончания строки. core.autocrlf=true
не вариант, который может включить один человек в команде; всем нужны одинаковые настройки. Это потому, что если у вас core.autocrlf=false
, вы говорите Git, что содержимое на диске идентично содержимому в хранилище. Если вы работаете в Windows, это означает, что вы проверяете файлы с окончаниями строк в стиле Windows (\r\n
). Если у вас есть коллега, который разрешает core.autocrlf=true
, то вы говорите Git, что содержимое на диске имеет конец строки в стиле Windows, а содержимое в хранилище имеет конец строки в стиле Unix (\n
).
Но ваш коллега сказал git ложь, поскольку в содержимом репозитория на самом деле содержится \r\n
.
При несоответствии этих настроек могут происходить различные странные вещи, в том числе такие, как исправления, которые не применяются.
Вместо этого вы должны:
Установите * text=auto
в вашем файле .gitattributes
. Это гарантирует, что все работающие в репозитории имеют одинаковые настройки, поскольку конфигурация на самом деле отмечена в , а не то, что каждый должен помнить для правильной настройки.
Перенормируйте репозиторий, чтобы содержимое репозитория действительно соответствовало заявленному вами. Вы можете сделать это с помощью git add --renormalize .
и проверить содержимое в.
Как только вы это сделаете (и все обновят ваши локальные рабочие папки), ваш git apply --patch
должен вести себя правильно.