所有已推送到
develop
分支的提交都表明它们已经过验证。
为了合并从
develop
到 master
的所有内容,我决定单击按钮 Rebase and merge
。 (我不想为 master 创建另一个新的提交。)
令人惊讶的是,合并成功后,所有经过验证的签名都从master上消失了。
rebase 时,更改会在 master 上重播。这会导致它们“重新基于”新的父提交,这将更改提交 ID(部分基于父提交 ID)。
变基可能还需要在重播提交时合并更改。即使合并自动发生,也可能会更改文件的内容。文件内容是构成 commit-id 的另一个元素。
验证是通过内容和提交元数据的加密签名完成的。因此,变基将破坏该签名。
为了不破坏您的签名,您需要使用快进合并(其中不创建新的合并提交)。为了实现这一点,您需要在本地重新调整您的更改并对其进行签名。
或者您可以压缩变基,将您所有的小提交汇总到一个新的提交中,GitHub 将代表您签名。
如果验证对您很重要,那么变基通常是一个坏主意,快进合并和合并提交将更好地反映实际发生的情况以及谁编写了这些更改。
官方文档:
虽然接受的答案是正确的,但在 2024 年我创建了一个实用程序来解决这个问题!
转到我的 Bash 框架https://github.com/hopeseekr/BashScripts/
这里是脚本本身的直接下载链接:git-same-sig-time。
git-same-sig-time [FIRST COMMIT]
之前(在 GitHub 上“Rebase and pull”之后):
运行后
/code/BashScripts/git-same-sig-time 5f5de8b
:
然后你需要用力推动:
git push -f origin trunk