修改 Fossil 中的提交

amend commit in Fossil

在 Git 中,更改当前分支上的最新提交 一个使用 --amend 选项到 git-commit.

Fossil 中最接近的操作是什么?在那儿 一种将 GPG 签名添加到未签名提交 (git commit --amend -S) 的方法?

在 fossil 中,无法修改提交。如 “Deleting content from Fossil”

中所述

Fossil is designed to keep all historical content forever.

但是,如果需要,您可以回滚提交并使用正确的 GPG 签名重做它。

一种在 Fossil 中修改提交的方法,就像在 git 中一样。事实上,机制是相同的,但过程(以及保留的数据)不同。

这两种工具都会创建一个新提交(git 不会像 fossil 那样修改原始提交),不同之处仅在于原始提交发生了什么。

在 git 中,旧的提交一直悬而未决,直到最终 永久删除 (除非被标记)。

在化石中,它被放在一个隐藏的分支上并永久保存(但如果需要您仍然可以查看它)。

git amend的过程是:先做修改,再更新repo数据库。在化石中,反之亦然 - 这也可以在 git 中完成,如下所示。

化石(第 1 步来自:https://fossil-scm.org/fossil/doc/trunk/www/shunning.wiki):

$ # 1.
$ fossil amend abcd1234 --branch oops --hide
$ fossil up trunk

$ # 2.
$ fossil revert -r abcd1234

$ # 3.
$ $EDITOR the.file
$ fossil commit -m 'my new msg with amended code'

git:

$ # 1.
$ git reset --hard HEAD^

$ # 2.
$ git checkout abcd1234 .

$ # 3.
$ $EDITOR the.file
$ git commit -am 'my new msg with amended code'

在第 2 步中,git 仍然知道旧提交,因为它还没有被 gc - 你可以在 reflog 中看到它。

git amend只是走捷径,但是对数据的操作是一样的

fossil amend 也可以只更新提交信息:

    fossil amend COMMIT_ID -m 'my new commit message'

    fossil amend COMMIT_ID -e # launch $EDITOR to revise message

(这些添加了带有 new/revised 消息的控制工件,Fossil 将显示该消息而不是原始消息。)

它还有其他功能:https://fossil-scm.org/fossil/help?cmd=amend

向提交添加签核的一种可能方法可能是:

    fossil amend COMMIT_D --tag sign-off=my_name

您可以通过打开清单设置、检查该提交、生成 PGP/GPG 签名,然后

向未签名的提交添加 PGP/GPG 签名
    fossil amend COMMIT_ID --tag signature=SIGNATURE

当然,这比直接修改支持加签名要难