Когда Git создает и сохраняет commit, сообщение commit, которое введено пользователем, сохраняется как двоичные данные, без какого-либо преобразования между кодировками символов текста. Кодирование Вашего сообщения commit определятся клиентом, который используете для составления сообщения commit.
Однако Git при этом сохраняет имя кодировки commit, если установлен ключ конфигурации "i18n.commitEncoding" (и если не используется для него значение по умолчанию "utf-8"). Вы можете вывести его текущее значение следующей командой:
$ git config i18n.commitEncoding
Если после этой команды никакого вывода не последовало, то значит по умолчанию для этого ключа установлено "utf-8".
Если Вы сделали commit через командную строку, то это значение должно соответствовать кодировке, установленной для командной строки (encoding set shell environment). Иначе "неправильная" кодировка, сохраненная в commit приведет к мусорному выводу (кракозябры или HEX-значения в угловых скобках) лога (истории commit) в ответ на команду git log. Пример:
Tower [1] принудительно использует кодировку UTF-8 для commit-ов (независимо от того, что установлено ключом "i18n.commitEncoding"), чтобы гарантировать правильное кодирование и отображение commit.
В командной строке Вы можете проверить свою кодировку следующей командой (работает в git shell):
Этот вывод показывает текущие настройки кодировки символов. Дополнительно, когда используется Terminal, вы должны убедиться, что предпочтительная кодировка также правильно задана в настройках.
Вы можете установить свою предпочтительную кодировку следующими строками в своем профиле shell:
Примечание: лучше настроить среду оболочки на UTF-8, чем конфигурацию Git, поскольку рекомендуется использовать UTF-8.
[Решение проблемы с отображением текста UTF8]
Как уже упоминалось, команда git log использует для отображения текста кодировку, которая установлена в настоящий момент для командной строки (bash или cmd). Чтобы правильно отображался текст в кодировке UTF8, необходимо установить переменную окружения LC_ALL в значение C.UTF-8, для чего в Windows достаточно выполнить команду:
set LC_ALL=C.UTF-8
После этого для текущей сессии русский текст UTF8 будет отображаться правильно:
Для того, чтобы эту настройку запомнить навсегда для текущего пользователя, необходимо настроить для него переменную окружения LC_ALL. В Windows это делается с помощью утилиты Свойства системы -> Закладка Дополнительно -> кнопка "Переменные среды...".
В Windows 10 это окно можно запустить, если ввести в строке поиска утилит "Изменение системных переменных среды".
После нажатия на кнопку "Переменные среды..." запустится диалог, где можно добавить переменную окружения LC_ALL и присвоить ей значение LC_ALL=C.UTF-8.
Просмотр истории commit и кодировки. Если Вы выводите лог commit (например, командой git log или git log --pretty=oneline) в командной строке, то значение конфигурации "i18n.logOutputEncoding" (или значения по умолчанию для "i18n.commitEncoding") должно соответствовать кодировке символов в командной строке. Команда в командной строке преобразует сообщений из кодировки commit в кодировку выводимых символов. Если кодировка командной строки (консоли) не совпадает с кодировкой вывода, то получится мусорный, не читаемый вывод!
Однако если сообщение commit сохранено в неправильной кодировке, и просматривается тоже в этой неправильной кодировке, то сообщение commit будет показано правильно. Несмотря на то, что все может хорошо и нормально работать в Вашей текущей системе, не факт, что если Вы передадите свой репозиторий кому-нибудь еще, что у него не будет мусорного вывода в ответ на попытку просмотра сообщений commit.
Когда у commit неправильная кодировка, нет надежного способа обнаружить это и исправить кодировку в момент, когда commit просматривается сторонним пользователем. Если возможно, попробуйте заново создать commit с правильной кодировкой, повторно выполнив его.
[Ссылки]
1. Character encoding for commit messages site:git-tower.com. 2. Git: просмотр истории фиксаций. 3. git log output encoding issues on Windows 10 CLI terminal site:stackoverflow.com.