1

我有两台机器,A 和 B,它们都访问外部 hg 存储库。

我在 A 上做了一些开发,还没有准备好将变更集推送到外部,并且需要切换机器,所以我使用hg serve. 变更集在 B 上继续,被提交,然后被推送到外部仓库。

然后我拉上 A 并更新为默认/提示。这留下了以前作为分支推送到 B 的本地变更集,但是由于我如何推送事物,本地变更集中的更改已经在默认/提示中。

我现在继续在 A 上进行更改并在本地提交,但是当我尝试推送时,hg 要求我合并或执行push -f。我知道push -f几乎从不推荐。这种情况接近我应该使用 rebase 的情况,但是我在本地或外部存储库中并不真正需要“rebase”的变更集,因为它们已经通过推送到 B 有效地处于默认/提示状态。

现在,我知道我可以与最新的本地变更集合并并丢弃更改,但是我仍然必须提交合并,这让我回到了 rebase 领域。

这是我可以做的hg push -f吗?

此外,如果我在继续提交变更集之前已更新为默认/提示,为什么从 A 推送会创建远程头?

4

1 回答 1

2

我会备份我的 A & B 存储库,然后试试这个:

rem Machine A
rem ---------
hg merge
hg commit -m"merge"
hg push

rem Machine B
rem ---------
hg pull

合并应确保您有一个从提示可见的每个变更集的实例,以及一个没有文件更改的附加合并变更集。推送提交的合并应该是安全的——尽管我会在这样做之前检查一下。

Mercurial 的特点之一是它擅长合并,因此您可以尝试利用这一点。如果您对合并的影响感到紧张,您可以尝试:

hg merge --preview

以更好地了解它将要做什么。

如果您真的想要一个无分支的历史记录,那么您可以创建一个外部存储库的干净克隆 [如果它不是太大] 并将 A 中的更改应用为补丁。

于 2010-05-10T22:39:25.177 回答