Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 使用hg rebase的Mercurial线性历史记录,具有不受限制的更改_Version Control_Mercurial_Dvcs_Tortoisehg - Fatal编程技术网

Version control 使用hg rebase的Mercurial线性历史记录,具有不受限制的更改

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

假设我在本地repo中有几个提交,在working dir中有一些未限制的更改。 在
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
    在新更改的基础上重新设置工作分支的基础。就我个人而言,我发现使用命名分支(它们永远不会逃过我的克隆到上游)是管理此类工作流的一种非常好的方式,因为它可以方便地在上游和我当前的项目之间来回移动,并且不会因为提交分支而受到惩罚

假设我在本地repo中有几个提交,在working dir中有一些未限制的更改。在hg pull、hg update之后,我从中央回购获得了几个新的变更集,这些变更集在本地回购中创建了一个新的头

如果您在工作目录中有未提交的更改,并且
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中的复制/粘贴)制作整个工作文件夹的完整副本,并在其中一个副本中进行实验。这与第一个要点的操作相同。