假设我在本地仓库中有多个提交,并且在工作目录中有一些未经修改的更改。
在hg pull
,hg update
之后,我从中央仓库获得了一些新的变更集,这些变更集在本地仓库中创建了一个新的头。
现在假设,我不想将这两个头合并并推送,在这种情况下,当我尝试合并时,我会得到消息,即我在工作目录中有未经修改的更改。
同样,假设我不想使用hg shelve
来搁置未经修改的更改并合并没有问题,但是想使用hg rebase
创建线性历史记录,所以我把我的在提交的提交之上提交。当我进行rebase时,实际上我会在hg rebase
章节下进行合并,如here所示。
现在我的问题是,我是否会收到相同的错误消息:“无法进行合并,存在未经修改的更改”,因为hg rebase
是否隐式合并?
如果是,那么我将不得不在两种情况下使用hg shelve
:两个头的显式合并和变基的隐式合并,没有?
提前致谢,
干杯
答案 0 :(得分:5)
简单的答案是肯定的。如果您有未提交的修改,hg rebase
将不允许您执行rebase。有一些解决方案,其中没有一个是完美的:
提交您的优秀工作,进行变基,然后hg export tip > foo.patch
,hg strip tip
和hg import --no-commit foo.patch
。
使用hg shelve
。我没有详细评论,因为我没有尝试过。
使用hg branch <branch-name>
创建一个新的命名分支,并在命名分支上提交您的杰出工作。然后,您可以使用hg rebase --keepbranches --base <branch-name> --dest default
在新更改的基础上重新设置工作分支。我个人认为使用命名分支(从不将我的克隆转移到上游)是一种管理这种工作流的非常好的方法,因为它可以很容易地在上游和我当前的项目之间来回移动,并且承担分支机构不会受到处罚。
答案 1 :(得分:4)
假设我在本地仓库中有多个提交,并且在工作目录中有一些未经修改的更改。在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
。