我一直在使用Mercurial遇到以下问题,这非常烦人:
hg update B
。 Mercurial"帮助"尝试重新定义我的本地更改以在B之上应用。这通常会导致冲突,现在它要求我修复冲突。但是,我不想解决冲突!我不希望我的本地更改完全适用于B之上。我希望他们留在A,或者作为A之后的新提交,或者根据具体情况修改为A。
有没有办法可以从这种状态中恢复?我唯一知道的方法是
这是一项很多工作,而且毫无意义。我不应该修改我的本地更改以在B之上应用,只是再次将它们重新设置为在A之上应用。
如果没有更好的方法可以从这个错误中恢复,有没有办法让hg
拒绝在您进行本地更改时进行更新?我从来不想这样做 - 如果我想要我只是提交本地更改并在B之上重新定义它们。
答案 0 :(得分:7)
在更新某地后返回脏文件有点棘手。 "技巧"是首次更新后确保您的工作副本具有脏文件。
所以在你做完之后
hg update $SOMEWHERE
并发现混乱,因为Mercurial开始打开合并工具,平静地关闭合并工具,然后运行
hg resolve --unmark --all
hg resolve --all --tool internal:local
由于您对其进行了更改而合并的所有文件现在看起来都像在脏工作副本中一样。这包括干净地合并的文件和提示您合并的文件。现在可以更新回来:
hg update $BACK
hg resolve --unmark --all
hg resolve --all --tool internal:local
你现在应该回到你开始的地方。如果您在第一次更新后修改了文件,那么它是您在第二次解析后看到的修改后的版本。这就是您希望在第一次更新后解析文件的原因。
答案 1 :(得分:4)
hg update -c
将中止更新。
答案 2 :(得分:2)
如果工作目录是脏的,也许答案是避免更新。 以下列方式修改〜/ .hgrc应该有所帮助:
[hooks]
preupdate = test -z "$(hg status)"
答案 3 :(得分:2)
如果没有更好的方法可以从这个错误中恢复过来,有没有办法 当您有本地更改时,让 hg 拒绝进行更新?
将此添加到您的 ~/.hgrc
:
[commands]
update.check = noconflict
只要没有冲突,这仍然允许 hg update
进行未提交的更改。您还可以调用 hg help config.update.check
以获取其他可能的选项:
"commands.update.check"
Determines what level of checking 'hg update' will perform before
moving to a destination revision. Valid values are "abort", "none",
"linear", and "noconflict". "abort" always fails if the working
directory has uncommitted changes. "none" performs no checking, and
may result in a merge with uncommitted changes. "linear" allows any
update as long as it follows a straight line in the revision history,
and may trigger a merge with uncommitted changes. "noconflict" will
allow any update which would not trigger a merge with uncommitted
changes, if any are present. (default: "linear")