请注意,我说的是GPG签名(-S
),而不是“签收”功能(-s
)!
我有一个git存储库,我想在其中签署所有我的提交,即使它们真的是旧的提交。我知道,这将改变历史,而基于此回购的其他人将无法再推动他们的改变。这对我来说不是 问题,我完全了解其含义。
我正在考虑rebase -i
命令,但之后我会丢失所有分支信息并将整个历史记录弄平。另外,有些提交不是由我提出的,我希望保持原样。
有没有办法做到这一点?
答案 0 :(得分:3)
你是正确的,重写已发布的历史记录会对你的合作者造成不满。
对于您想要执行的操作,我建议您创建新的签名标记。假设你提交的一个提交的SHA-1是abc123。在这种情况下,运行
$ git tag -s abc123
有关详细信息,请参阅git tag
documentation。
答案 1 :(得分:2)
这样可以解决问题:
git filter-branch --commit-filter 'git commit-tree -S "$@"'
然而,梅加尔的观点是正确的。签署一个提交是“哲学上”等同于签署所有以前的提交。
答案 2 :(得分:0)
嗯,两天后,@ meagar还没有重新格式化它作为答案,所以这里是:
这没有任何意义。这不是你应该做或不需要做的事情, 或者是受支持的行为。只需签署当前提交。整个 签名点是,通过签署提交,您将签署所有 以前的提交。根据定义,任何给定的提交都是所有提交的总和 以前的提交。你签了一个,你已经暗中签了字 每个提交都可以从您签名的提交中获得。
他的评论非常有意义并回答了我的问题!在图中有一个签名提交,有效地在该分支上添加“批准标记”直到“开始时间”。这就是我真正想要的。签署每个提交是不必要的!
如果您有多个未合并的分支,则可以对每个分支进行“签名”提交。