Perform an empty commit with mercurial
使用 Mercurial 队列扩展,我可以使用一些提交消息进行空提交,如下所示:
1
| hg qnew patch_name -m"message" |
有没有办法在没有 Mercurial 队列的情况下做到这一点?我试过了:
但是 hg 只是说"没有改变"并且不执行提交,我没有看到任何可以覆盖它的"强制"选项。
如果您想知道我这样做的动机:我们有测试基础设施,您可以在其中推送到一个特殊的存储库,它会触发自动化测试运行。您需要在最尖端提交的提交消息中放入一个特殊字符串,说明要运行哪些测试。显然,当我推送到实际的存储库时,我不希望这个字符串在那里。与其修改提交两次(一次添加特殊字符串,第二次删除它),我会发现只添加一个空提交,然后将其回滚更简洁——我可以用 mq 做到这一点,但我想找到一种不用 mq 的方法。
>您可以使用 hg commit --amend 创建空提交?/p>>
>只需创建一个任意提交并撤销更改。然后将两个提交折叠在一起?/p>>
>示例?/p>>
1 2 3 4 5
| touch tmp # create dummy file
hg add tmp # add file and...
hg commit -m"tmp" # ... commit
hg rm tmp # remove the file again and ...
hg commit --amend -m"empty commit" # ... commit |
-
与 hg commit --close-branch 类似,这不会创建一个真正的空提交——它仍然会在变更集中留下一个标记并创建一个修改备份包。但是,我认为更好的是,当它打算保持打开时,它没有将分支标记为关闭的潜在混淆效果。
-
如果您已经推送到远程存储库,这将不起作用
-
@matteo 为什么不呢?只要您不在两个 hg commit 命令之间插入就可以了。
-
那就是我说的:如果你在第一次提交之后已经推送了,你就不能修改它。
-
哦,我明白了,我没有理解这个例子。我以为你建议单独使用修正。
-
丑陋(应该在界面中),但它有效。当我在一组线性提交上关闭分支时,我需要它来标记角色回退点,并且目前没有真正的更改。
-
@richard 同意!但是,如果您确实需要更频繁地创建别名,可以通过将以下内容放入您的 .hgrc 文件中:[alias] emptycommit = !touch tmp ; $HG add tmp ; $HG commit -m"<enter commit message>" ; $HG rm tmp ; $HG commit --amend"$@"
-
改进@JosefEisl 别名 [alias] emptycommit = !touch tmp ; $HG add tmp ; $HG commit tmp -m"<enter commit message>" ; $HG rm tmp ; $HG commit tmp --amend"$@" 提交应该针对我们的 tmp 文件,这样我们就不会提交更改(因此它始终是一个空提交)。
>你现在可以通过 hg ci -m"empty commit"
> 创建空提交
>例?/p>>
1 2
| hg branch my-next-branch
hg ci -m"empty commit" |
>将创建一个带有单个空提交的 my-next-branch,您可以将其推送到远程仓库。
>
-
我总是能够有一个"空"的提交,它只做一个分支。假设我已经对分支进行了七次提交,然后只想添加一条新的提交消息而不更改文件。 hg ci -m"empty commit" 在这种情况下应该工作吗?我试过了,它没有用。我不知道我只是有一个旧版本还是因为这个示例首先创建了一个分支,而在我描述的场景中我没有这样做。
你可以提交关闭分支:
1
| hg commit --close-branch -m"message" |
更新:
您可以关闭一次分支,但可以通过另一个提交重新打开它。在不更改文件的情况下重新打开分支的最简单方法是标记一些修订。因此,您可以使用 hg commit --close-branch 进行空提?唬缓笫褂?hg tag 重新打开。
>
>更新 v
>
>实际上你可以只用 hg tag 命令创建新的空提交。它具有用于设置提交消息的 -m 参数。如果你真的不关心这个标签的正确性,你可以通过使用 -f 参数调用 hg tag 来只使用一个标签名称?/p>>
1
| hg tag t1 -f -m"message" |
- 这些操作不会因为分支关闭和标签创建事件而污染历史吗?
-
关闭分支不会污染历史。它只会添加新的变更集。标记创建添加带有特定提交消息的新变更集,但您可以使用 -m 参数覆盖它。
-
嘿,您实际上可以在不关闭分支的情况下创建新标签。如果您不关心标签而只关心提交消息,您甚至可以只使用一个标签并将其设置为 -f 标志。因此,您可以使用 hg tag t1 -f -m"message" 创建空提交。
-
关闭分支或添加标签不是真正的空提交。