Mercurial操作:推送后如何回退至修订版3313
如何干净回退Mercurial分支B到指定版本且不产生新Heads
别担心,第一次处理这种回滚操作确实容易懵,我一步步给你讲清楚两种可行的方案,你可以根据自己的协作场景选择:
方案一:创建回退Commit(多人协作首选)
这种方式不会改写分支历史,只是在现有B分支上新增一个回退的Commit,其他团队成员拉取代码时不会遇到冲突,风险最低:
确保本地分支干净
先检查当前有没有未提交的修改:hg status如果有未提交的内容,要么用
hg commit提交,要么用hg shelve暂存起来(后续可以用hg unshelve恢复)。切换到分支B
hg checkout B将所有文件恢复到修订版3313的状态
这个命令会把分支B下的所有文件重置到3313版本的样子:hg revert -r 3313 --all提交回退修改
把恢复后的状态提交成一个新的Commit,明确说明回退原因:hg commit -m "Revert branch B to revision 3313, remove unwanted files introduced by merge"推送到远程仓库
正常推送即可,因为是在现有分支的最新Commit之后追加的新Commit,远程会直接接受,不会产生新Heads:hg push
方案二:强制改写远程分支历史(单人/小团队场景)
如果你的分支B只有你自己在使用,或者团队成员都同意改写历史,可以直接把远程分支B强制回退到3313版本,但要注意这种方式会覆盖远程的历史记录,可能给其他成员带来麻烦:
切换到分支B并回退到3313版本
hg checkout B hg update -r 3313强制推送到远程
用--force和--rev参数指定只推送3313版本到远程分支B,这样会直接覆盖远程的B分支,不会产生新Heads:hg push --force --rev 3313 B
重要提醒
- 执行任何操作前,一定要备份本地仓库(复制整个仓库文件夹),防止操作失误导致数据丢失。
- 如果选择方案二,务必提前告知所有协作成员,让他们不要基于之前的B分支版本继续开发,需要重新拉取最新的B分支(可以用
hg pull -u)。
内容的提问来源于stack exchange,提问作者Rakesh Mandhala
相关产品推荐
相关产品推荐

