По умолчанию Git не проверяет, действительно ли имя и email автора коммита принадлежат реальному человеку. Любой может указать произвольные данные, что создаёт риск фальсификации истории изменений. В определённых случаях это позволяет выдать чужие коммиты за свои — например, с целью внедрения вредоносного кода.
Чтобы удостовериться, что коммиты действительно принадлежат доверенному автору, Git поддерживает их подпись с помощью GPG.
Визуально это выглядит так (скриншот с GitHub):

Подготовка
Сначала установите GPG для Windows — Gpg4win. При установке обязательно выберите компонент GPG Agent.
Создание ключей
Откройте терминал (PowerShell или Git Bash) и выполните:
gpg --full-generate-keyВ терминале появится:
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection? 1 # Выбираем RSA and RSA
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits # Длина ключа 4096 бит
Key is valid for? (0) 1y # Срок действия — 1 год
Key expires at: ... # Подтверждаем
Real name: Alexei Chernyavsky # Имя как в GitHub
Email address: email@example.org
Comment: example.org
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # ПодтверждаемПосле этого нужно ввести надёжный пароль для защиты закрытого ключа.
Чтобы увидеть идентификатор ключа (Key ID), используйте:
gpg --list-secret-keys --keyid-format LONGПример вывода:
sec rsa4096/98F2EBC6C153DED5E26D579E9B1CACC547A80702 2025-07-19 [SC]
uid [ultimate] Alexei Chernyavsky (example.org) <email@example.org>
ssb rsa4096/7C7183969D84B1A3 2025-07-19 [E]Скопируйте длинный идентификатор ключа после rsa4096/ — он понадобится для настройки Git
Экспорт открытого ключа
Теперь экспортируем открытую часть ключа в файл:
gpg --armor --export email@example.org > ./pubkey_email_example_org.ascЗамените email@example.org на ваш адрес. В результате публичный gpg ключ сохраниться в файл pubkey_email_example_org.asc.
Загрузка ключа на GitHub
Перейдите в настройки GPG-ключей GitHub, нажмите New GPG Key и вставьте содержимое файла pubkey_email_example_org.asc.
В заголовке (Title) можно указать email или описание ключа.
Если всё сделано верно, GitHub отобразит новый ключ и начнёт проверять подписи коммитов.

Можно загрузить несколько ключей, если вы используете разные ключи для разных проектов.
Настройка Git
Указываем путь к GPG:
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"Устанавливаем ключ для подписи для профиля по умолчанию (здесь замените идентификатор 98F2EBC6C153DED5E26D579E9B1CACC547A80702 на свой, который скопировали ранее):
git config --global user.signingkey 98F2EBC6C153DED5E26D579E9B1CACC547A80702Включаем автоматическую подпись всех коммитов:
git config --global commit.gpgsign trueТеперь при создании коммита Git будет подписывать его с помощью GPG. При этом откроется окно, в котором нужно будет ввести пароль к закрытому ключу.
В результате выполнения этих комманд в файле .gitconfig появятся строки:
[user]
signingkey = 98F2EBC6C153DED5E26D579E9B1CACC547A80702
[commit]
gpgsign = true
[gpg]
program = C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exeПроверка подписи
Проверить, что коммит подписан, можно командой:
git log --show-signatureGit выведет информацию о том, был ли коммит подписан и каким ключом.
Перенос ключей на другой компьютер
Смотрим список установленных на компьютере ключей:
gpg --list-keysПримерный вывод:
sec rsa4096/98F2EBC6C153DED5E26D579E9B1CACC547A80702 2025-07-19 [SC]
uid [ultimate] Alexei Chernyavsky (example.org) <email@example.org>
ssb rsa4096/7C7183969D84B1A3 2025-07-19 [E]Копируем в буфер обмена обмена идентификатор ключа: 98F2EBC6C153DED5E26D579E9B1CACC547A80702
Экспортируем публичный и секретный ключ:
gpg --output email@example.org_pub.gpg --armor --export 98F2EBC6C153DED5E26D579E9B1CACC547A80702
gpg --output email@example.org_sec.gpg --armor --export-secret-key 98F2EBC6C153DED5E26D579E9B1CACC547A80702Копируем экспортируемые ключи на другой компьютер, и устанавливаем уже на новом:
gpg --import ~/email@example.org_pub.gpg
gpg --allow-secret-key-import --import ~/email@example.org_sec.gpgПосле импорта проверяем, появились ли на новом компьютере ключи gpg --list-keys.