按下“Rebase and merge”后,经过验证的签名消失了

Jef*_*Kim 2 git github branching-and-merging

所有推送到develop分支的提交都表明它们已经过验证。

为了合并从develop到的所有内容master,我决定单击一个按钮Rebase and merge。(我不想为 master 创建另一个新提交。)

令人惊讶的是,合并成功后,所有经过验证的签名都从 master 上消失了。

  1. 我在这里缺少什么?
  2. 我应该如何保留经过验证的签名?

jes*_*ing 5

重新定位时,更改会在 master 上重播。这会导致它们“重新基于”新的父提交,这将更改提交 ID(部分基于父提交 ID)。

Rebase 还可能需要在重放提交时合并更改。即使合并自动发生,它也可能会更改文件的内容。文件内容是构成 commit-id 的另一个元素。

验证是通过内容和提交元数据的加密签名完成的。因此,变基将破坏该签名。

为了不破坏您的签名,您需要使用快进合并(不创建新的合并提交)。要实现这一点,您需要在本地重新设置更改的基础并对其进行签名。

或者,您可以使用 squash-rebase,将您所有的小提交汇总到一个新提交中,GitHub 将代表您签署该提交。

如果验证对您很重要,那么变基通常是一个坏主意,快进合并和合并提交将更好地反映实际发生的情况以及这些更改的作者。

  • “当 rebase 时,更改会在 master 上重播。这会导致它们在新的父提交上“rebase”” -> 在许多情况下都是错误的,因为功能分支已经基于最新的 master(使用 rebase 工作流程时完全正常) )。在这种情况下,是 github 的行为(使用 git rebase --force-rebase 更改时间戳)导致提交哈希值发生变化。这种情况不会发生在像 gitlab 这样的其他 git 服务器上,而且是一个非常糟糕的实现。 (3认同)
  • 实际上,不能包含提交本身的哈希值,因为它基于包含签名的提交对象。这将是一个先有鸡还是先有蛋的问题。 (2认同)