这是我应该“hg push -f”的情况吗?

时间:2010-05-10 18:51:49

标签: version-control mercurial tortoisehg

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

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

然后我拉上A并更新为默认/提示。这使得之前被推送到B的本地变更集成为一个分支,但由于我如何推动事物,本地变更集的变化已经是默认/提示。

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

现在,我知道我可以合并最新的本地变更集,只是放弃更改,但是我仍然需要提交合并,这会让我回到rebase领域。

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

的情况

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

1 个答案:

答案 0 :(得分: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作为补丁。