如果在Mercurial中,"hg up -r <previous_revision_number>"完成,并且某些文件被修改,并且意外提交,该怎么办?

nop*_*ole 0 mercurial

如果只是为了看一个程序的行为,

hg up -r 1000
Run Code Online (Sandbox Code Playgroud)

完成,而当前的修订版是1020.

然后对2个文件进行了一些更改,并且意外地提交了文件.

所以现在从版本1000到1020进行了更改,还有一些更改从1000直接到1021 ......

在这种情况下,应该如何处理?

至少有一种可能性

hg backout -r 1021
hg up tip
Run Code Online (Sandbox Code Playgroud)

并进行更改,好像1021没有发生任何事情.另一个选项是否hg merge需要注意代码的合并方式?(因为从1000到1021的所有更改都与相同的功能和相同的文件相关).或者除了这两个之外还有其他选择吗?

Ry4*_*ase 5

只是做合并.这不会很痛苦.

退出的人建议仍然会留下多个头.目前您的历史记录如下:

---[1000]---[1001]--....--[1019]--[1020]
      \
       \----[1021]
Run Code Online (Sandbox Code Playgroud)

在1021退出后,它看起来像:

---[1000]---[1001]--....--[1019]--[1020]
      \
       \----[1021]---[1022]
Run Code Online (Sandbox Code Playgroud)

其中1021和1022会在逻辑上相互撤消,但你仍然有两个头.

合并后你会有

---[1000]---[1001]--....--[1019]--[1020]---[1022]
      \                                   /
       \----[1021]-----------------------/
Run Code Online (Sandbox Code Playgroud)

你可以在更新到1021之后做一个'hg commit --close-branch',这仍然会留下那个头但是会阻止它显示在列表上,但合并是一个更好的选择.

如果你还没有把1021推到任何地方你可以完全放弃它:

hg clone -r 1020 myrepo trimmedrepo
Run Code Online (Sandbox Code Playgroud)

然后你会有一个新的repo,trimmedrepo,包括1020(但没有1021).

我喜欢合并.