使用未提交的更改从"hg update"恢复

HC4*_*ica 7 version-control merge mercurial

我一直在使用Mercurial遇到以下问题,这非常烦人:

  • 我正在进行一些修订A.
  • 我有本地更改,我打算在A之上提交或修改,但还没有.
  • 我想去修订版B,但我忘记了我有本地修改!
  • 我知道hg update B.Mercurial"帮助"尝试将我的本地更改重新设置为应用于B之上.这通常会导致冲突,现在它要求我修复冲突.

但是,我不想修复冲突!我不希望我的本地更改完全适用于B之上.我希望他们留在A,或者作为A之后的新提交,或者根据具体情况修改为A.

有没有办法可以从这个州恢复?我知道的唯一方法是

  1. 修复B处的合并冲突
  2. 回到A,再次发生合并冲突
  3. 在A处再次修复合并冲突
  4. 在A处提交我的更改并返回到B.

这是很多工作,而且毫无意义.我不应该将我的本地更改重新设置为在B之上应用,只是再次将它们重新绑定以应用于A之上.

如果没有更好的办法,从这个错误中恢复过来,是有办法hg拒绝时,你有局部变化做一个更新?我从来不想这样做 - 如果我想要我只是提交本地更改并在B之上重新定义它们.

Mar*_*ler 7

在更新某个地方并返回后获取脏文件有点棘手."技巧"是确保您的工作副本在第一次更新后具有脏文件.

所以你做完之后

hg update $SOMEWHERE
Run Code Online (Sandbox Code Playgroud)

并发现混乱,因为Mercurial开始打开合并工具,平静地关闭合并工具,然后运行

hg resolve --unmark --all
hg resolve --all --tool internal:local
Run Code Online (Sandbox Code Playgroud)

由于您对其进行了更改而合并的所有文件现在看起来就像它们在脏工作副本中所做的那样.这包括干净地合并的文件和提示您合并的文件.现在可以更新回来:

hg update $BACK
hg resolve --unmark --all
hg resolve --all --tool internal:local
Run Code Online (Sandbox Code Playgroud)

你现在应该回到你开始的地方.如果您在第一次更新后修改了文件,那么它是您在第二次解析后看到的修改后的版本.这就是您希望在第一次更新后解析文件的原因.