我有两台机器,A和B都可以访问外部hg存储库。
我在A上做了一些开发,还没准备好将变更集推送到外部,并且需要切换机器,所以我使用hg serve
将变更集推送到B. B上的变更集继续存在,然后被推送到外部回购。
然后我拉上A并更新为默认/提示。这使得之前被推送到B的本地变更集成为一个分支,但由于我如何推动事物,本地变更集的变化已经是默认/提示。
我现在继续进行更改并在A上进行本地提交,但是当我尝试推送hg要求我合并或执行push -f
时。我知道push -f
几乎从未被推荐过。
这种情况接近于我应该使用rebase的情况,但是那些“重新定位”的变更集我并不需要本地或外部存储库,因为它们已经通过推送到B而已经有效地处于默认/提示状态。
现在,我知道我可以合并最新的本地变更集,只是放弃更改,但是我仍然需要提交合并,这会让我回到rebase领域。
这是我可以做hg push -f
吗?
另外,如果我在继续提交更改集之前更新为默认/提示,为什么会从A创建远程头?
答案 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作为补丁。