即使状态被强制更改为 public,我仍然可以合并并推送到存储库吗?

Can I still merge and push to the repository even if the state was forcefully changed to public?

所以,我是 Mercurial 的新手,第一次尝试时就搞砸了。

在推送我的数据之前,我尝试合并一个分支(我认为这是一个旧分支)

我没有将它正确地推动以从 "draft" 更改为 "public",而是通过使用从 "draft" 到 "public"[=12 的更改阶段手动将其从 Tortoise 更改为=]

我以为这意味着它会放在存储库中,但是当我转到实际存储库(在 Bit Bucket 上)时我找不到它。

那么发生了什么,我想我从来没有推动过。

这导致我无法进行新更改,因为当我尝试提交其他文件、将其与其他分支合并并将其推送到存储库时,出现错误:

searching for changes
remote has heads on branch 'branch one' that are not known locally: 62bf86f93d4f
abort: push creates new remote head 7edef5d2e2e5 on branch 'branch one'!
hint: pull and merge or see "hg help push" for details about pushing new heads
[command returned code 255 Thu May 27 14:43:44 2015]

所以我认为解决方案是与原始草案合并(现在是public)

因此我的问题是:即使我在 bitbucket 的存储库中找不到它,是否仍然可以合并并推送已被视为 "public" 的修订?

您提交的阶段(public vs. draft vs. secret)与提交是否可以合并无关。 draft 和 public 之间的区别只影响涉及提交的历史是否可以更改(例如通过 hg commit --amendhg rebase)。 Public 修订被认为是不可变的,修订草案仍然可以更改。

您仍然可以合并和推送。理论上,如果您确定您没有推送提交,您也可以安全地将阶段更改回草稿。然而,这将毫无意义 [1],因为推动合并将立即使其再次 public [2].

[1] 如果您使用 hg pull --rebase,它会很有用,但如果您不知道它的作用,您可能不应该使用它。

[2] 除非您推送到非发布存储库,但除非您的团队正在使用 evolve 扩展,否则这不太可能。如果您不知道什么是非发布存储库或 evolve 扩展,则无需知道。