Теперь у Git есть возможность подписывать коммиты git commit -S
, что замечательно, но иногда я забываю флаг commit
, а иногда я отправляю по почте патчи, к которым я применяю am
, и у этой команды нет флага для подписи.
Есть ли способ добавить подпись в уже записанный коммит?
git config commit.gpgsign true
.Ответы:
Добавьте следующую строку после каждого коммита, который вы хотите подписать
exec git commit --amend --no-edit -S
Это запустит эту команду после выбора каждого коммита.
ОБНОВИТЬ:
Более простой способ сделать это:
Это сбрасывает все до разработки (или любого хэша), и вам не нужно копировать вставить после каждого коммита.
источник
resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"
становитсяgit resign HASH
git commit --amend --no-edit -n -S
.git push --force
?Подписание коммита изменяет его содержимое, поэтому более поздние коммиты в зависимости от него меняют свой хеш.
Если вы просто хотите подписать самый последний коммит,
git commit -S --amend
сработает.источник
Я использую
git rebase -i --root
(см. Переписывание истории ) и меняюpick
наedit
.Затем я использую
git commit -S --amend --no-edit && git rebase --continue
(в Windows) для каждого коммита.источник
Я также наткнулся на ту же проблему, и вот мое решение:
это подпишет все мои коммиты с первого начального коммита, а также обойдет хук коммита, который я настроил с помощью лайки . Не нужно менять
pick
наedit
.источник
Если вы хотите отфильтровать только определенные коммиты и подписать только их, вы можете использовать
filter-branch
:Это полезно, если по какой-то причине вы хотите подписывать только свои коммиты.
источник
Если вам нужно, чтобы GPG подписал все коммиты, ПОСЛЕ определенного коммита в текущей ветке, вы можете использовать следующее:
git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD
Где
<COMMIT>
находится идентификатор коммита (напримерabc123e5
).Это дает дополнительное преимущество, заключающееся в том, что он не нарушает метаданные фиксации (включая дату фиксации).
Если вы также хотите прекратить получать запросы на ввод вашей парольной фразы GPG при каждом коммите, также посмотрите этот ответ: https://askubuntu.com/a/805550
Примечание: Переход от
gpg
кgpg2
для GIT подписания потребует , чтобы вы повторно импортировать секретный ключ в GPG 2.источник