Mercurial分支修订历史,推动时两个偏头

Jon*_*der 4 mercurial

我在本地(23-28)提交了一系列变更集,然后我意识到我想回到第25版,所以我跑了"hg up -r 25"回去.然后我从那里开始工作并提交了一些变更集.现在我已准备好将我的更改推送到服务器,但是当我尝试这样做时,它会抱怨"abort:push在分支上创建新的远程头部'默认'!".我以为其他人可能已经提交到存储库,所以我做了一个hg pull,但没有得到任何改变.

这是我正在使用的修订树

 23
 |
 24
 |
 25
 / \
26 29 
|   |
27 30
|   |
28 31
    |
   32
    |
   33
    |
   34
    |
   35
Run Code Online (Sandbox Code Playgroud)

是否可以删除修订版26,27和28?我怎样才能解决问题,以便我可以毫无错误地运行"hg push"?我是否应该使用其他命令返回修订版25?

Ry4*_*ase 5

让我在拉斯的回答中发出不同意见.Mercurial是一个关于构建不可变历史的系统.想想一位科学家在他或她的实验室工作书中用笔在数字页面上工作.一切都很重要,即使是你希望你没有写的东西,也不想在这一秒.默认情况下,strip命令未启用,原因是它违反了不可变性,这是一个多变的目标.

解决这个问题的更多"Mercurial"方法是将26合并为35,完全选择35中的选项,这样你就可以回到一个头.然后你的推动仍然只有一个头,但所有的历史都保留了下来.

或者,您可以选择'hg push -r 35',它不会给您任何警告或错误,也不需要-f,因为您将只用一个头离开repo repo.

strip没有任何问题,但它不是Mercurial中传统工具集或思维模式的一部分.