修改 Fossil 中的提交

Posted

技术标签:

【中文标题】修改 Fossil 中的提交【英文标题】:amend commit in Fossil 【发布时间】:2017-05-05 17:49:29 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

在化石中,没有办法修改提交。如“Deleting content from Fossil” 中所述,

Fossil 旨在永久保存所有历史内容。

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

【讨论】:

他们的立场在某种程度上是有道理的,但它会使简单的操作变得复杂,例如改进提交消息或添加签核行。这是我习惯使用--amend 的目的:润色元数据,而不是提交内容。【参考方案2】:

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

这两个工具都会创建一个新的提交(git 不会像化石一样修改原始文件),不同之处仅在于原始提交会发生什么。

在 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'

混帐:

$ # 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'd - 你可以在 reflog 中看到它。

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

【讨论】:

【参考方案3】:

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

    fossil amend COMMIT_ID -m 'my new commit message'

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

(这些添加了一个带有新/修订消息的控制工件,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

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

【讨论】:

以上是关于修改 Fossil 中的提交的主要内容,如果未能解决你的问题,请参考以下文章

Fossil 在提交时因“数据库已锁定错误”而崩溃

从 Fossil TH1 发布工单更新/提交到 Webhook

Fossil SCM:将叶子合并回树干

git修改提交历史中的author信息

SourceTreeSourceTree中的提交代码时,同一文件已经被他人修改的提交方法

如何修改现有提交中的特定单词? [复制]