Mercurial 3.6.3中拉取远程代码后本地提交被穿插,如何将本地提交置于提交链顶部?
解决Mercurial 3.6.3本地提交变基到远程最新提交的问题
别担心,这个问题在老版本Mercurial里很常见——hg pull -u确实会直接把你切换到远程最新提交,让你的本地提交变成独立的分支头。下面分两种场景给你一步步的解决方案:
场景1:你已经执行了hg pull -u,现在本地有两个提交头
先查看所有未合并的提交头,找到你本地两次提交对应的那个头的哈希值:
hg heads输出里会列出所有分支顶端的提交,你可以通过提交信息、作者认出自己的提交,记下它的哈希值(比如
abc123)。切换回你的本地提交分支:
hg update abc123确保rebase扩展已启用(老版本Hg默认没开启这个功能):
打开仓库根目录或用户目录下的.hgrc文件,检查是否有以下内容,没有的话就加上:[extensions] rebase =执行变基,把你的本地提交移到远程最新提交的顶部:
hg rebase -d default这里
default是远程默认分支的名字,如果你的远程分支叫别的,替换成对应名称即可。变基过程中如果遇到冲突,解决后用hg add标记冲突文件已处理,再执行hg rebase --continue直到完成。
场景2:你还没执行hg pull -u,想提前避免这个问题
先拉取远程提交,但不更新本地工作区:
hg pull这个命令只会把远程的新提交下载到本地仓库,不会改变你当前的工作区和提交位置。
同样确保rebase扩展已启用(参考场景1的步骤3)。
直接变基到远程最新提交:
hg rebase -d default完成后,你的两次本地提交就会排在远程最新提交的后面,成为提交链的顶部了。
额外注意事项
- 变基前一定要确保本地工作区干净,用
hg status检查,如果有未提交的修改,要么先提交,要么用hg diff > changes.patch导出修改,再执行hg revert --all清空工作区,变基完成后用hg patch changes.patch恢复修改(老版本Hg没有shelve暂存命令,只能用这种方式)。 - 如果变基时冲突反复出现,可以考虑先备份本地提交,再重新克隆远程仓库,最后用
hg import导入你的提交补丁。
内容的提问来源于stack exchange,提问作者nsane
相关产品推荐
相关产品推荐

