Подтвердить что ты не робот

Как сохранить фиксацию gpg-подписи после интерактивной перезагрузки?

Когда я хочу раздавить некоторые коммиты с помощью интерактивного rebase:

git rebase -i HEAD~3

И затем:

pick cbd03e3 Final commit (signed)
s f522f5d bla-bla-bla (signed)
s 09a7b7c bla-bla (signed)

# Rebase c2e142e..09a7b7c onto c2e142e
...

Конечная фиксация не имеет подписи gpg, несмотря на то, что все эти коммиты имеют одну и ту же подпись. Возможно ли сохранить фиксацию gpg-сигнатуры после интерактивного сквоша переформатирования?

4b9b3361

Ответ 1

Как заявил Cupcake, вы не можете сохранить старую подпись из unsquashed commits, но вы можете подписать новый сжатый коммит, если вы пересоздаете вот так:

git rebase --interactive [email protected] HEAD~4

Добавление [email protected] в качестве аргумента подпишет окончательный сжатый коммит.

Ответ 2

Не имеет смысла, что вы сможете. Весь смысл подписи gpg заключается в проверке того, что код не был подделан. Если бы вы могли сохранить подпись после изменения истории, это может победить целую цель.

В настоящее время я не подписываю код Git с gpg, поэтому я не знаю точных данных, но, я думаю, он, вероятно, хеширует конечный объект фиксации дерева. Когда вы буферизуете, как в вашем примере, Final commit будет иметь другой идентификатор sha1, поэтому он не будет тем же объектом, что и до rebase, поэтому наличие такой же подписи gpg, вероятно, невозможно, и, как я уже сказал, это не сделает чувство.

Ответ 3

Чтобы усилить тот факт, что вы не сохраняете подпись на rebased commits, git 2.9.x + (Q3 2016) ясно укажет, что git pull --rebase не будет проверять подпись (поскольку часть перебаза потеряла их)

См. commit c57e501 (20 мая 2016 г.) Александр Хирш (` `).
(слияние Junio ​​C Hamano - gitster - в commit 73bc4b4, 20 июня 2016 г.

pull: предупредить --verify-signatures с помощью --rebase

git-pull молча игнорирует параметр --verify-signatures, когда --rebase, потенциально оставляя пользователей в убеждении, что операция rebase проверила бы действительные подписи GPG.

Реализация --verify-signatures для git rebase обсуждалась, но сомнения в действительном рабочем процессе возросли. Поскольку вы обычно сливаете других веток в ваш филиал, у вас может быть интерес, который их сторона имеет действительную подпись GPG.

Rebasing, с другой стороны, состоит в том, чтобы перестроить ветку поверх другую работу, чтобы вернуть результат назад, а уже слишком поздно отказаться от своей работы, даже если вы обнаружите, что их коммиты не приемлемы подпись.

Позвольте предупредить пользователей о том, что параметр --verify-signatures игнорируется во время "pull --rebase"; пользователи не задаются вопросом, что произойдет, если их коммиты не имеют приемлемой сигнатуры таким образом.