Version control 使用hg rebase的Mercurial线性历史记录,具有不受限制的更改
假设我在本地repo中有几个提交,在working dir中有一些未限制的更改。 在Version control 使用hg rebase的Mercurial线性历史记录,具有不受限制的更改,version-control,mercurial,dvcs,tortoisehg,Version Control,Mercurial,Dvcs,Tortoisehg,假设我在本地repo中有几个提交,在working dir中有一些未限制的更改。 在hg pull,hg update之后,我从中央回购获得了两个新的变更集,它们在本地回购中创建了一个新的头 现在假设,我不想合并这两个头并推送,在这种情况下,当尝试合并时,我将得到消息,我在工作目录中有未限制的更改 同样,假设我不想使用hg shelve来搁置未限制的更改和合并,而是想通过使用hg rebase创建一个线性历史,所以我将提交放在拉式提交之上。当我做rebase时,实际上我做了一个合并,如hg re
hg pull
,hg update
之后,我从中央回购获得了两个新的变更集,它们在本地回购中创建了一个新的头
现在假设,我不想合并这两个头并推送,在这种情况下,当尝试合并时,我将得到消息,我在工作目录中有未限制的更改
同样,假设我不想使用hg shelve
来搁置未限制的更改和合并,而是想通过使用hg rebase
创建一个线性历史,所以我将提交放在拉式提交之上。当我做rebase时,实际上我做了一个合并,如hg rebase
一章中所示
现在我的问题是,我是否会收到相同的错误消息:“无法合并,存在未限制的更改”,因为hg-rebase
是否进行隐式合并
如果是,那么我必须在这两种情况下使用hg shelve
:两个头的显式合并和重定基址时的隐式合并,否
提前感谢,干杯简单的答案是肯定的
hg rebase
将不允许您在未提交编辑时执行rebase。有几种解决方案,但没有一种是完美的:
- 提交您的重要工作,执行重基,然后执行
,hg导出提示>foo.patch
,以及hg strip
hg导入-不提交foo.patch
- 使用hg书架。由于我还没有尝试过,所以我无法对此进行详细评论
- 使用
创建一个新的命名分支,并提交您在命名分支上的杰出工作。然后可以使用hg branch
在新更改的基础上重新设置工作分支的基础。就我个人而言,我发现使用命名分支(它们永远不会逃过我的克隆到上游)是管理此类工作流的一种非常好的方式,因为它可以方便地在上游和我当前的项目之间来回移动,并且不会因为提交分支而受到惩罚hg-rebase--keepbranches--base--dest-default
hg pull
从上游为您提供了一个新的头,hg update
将告诉您:
abort: crosses branches (merge branches or use --clean to discard changes)
如果尝试合并,则会收到一条消息,说明无法合并未提交的更改
所有这一切都有很好的理由:如果不提交更改,那么当合并机制启动时,更改可能会永远丢失。在尝试与上游代码合并或重新设置其基础之前,应该提交或搁置未提交的更改
您还可以考虑使用MQ来帮助您实现这一点;MQ和rebase的设计是为了配合良好,因此,如果您的本地未完成的更改由MQ管理,那么您所要做的就是
hg qrefresh;hg pull--rebase
提交之前是否必须修复历史记录?为什么不等到稍后提交,然后修复历史记录呢?找到答案的最佳方法是,只需使用普通操作系统操作(例如Windows中的复制/粘贴)制作整个工作文件夹的完整副本,并在其中一个副本中进行实验。这与第一个要点的操作相同。