如何将工作目录复制到新提交

How to copy working directory to a new commit

我有以下提交结构:

a->b->c

现在 c 是一个实验,它与 b 有很大不同(对 b 的任何更改都会导致 c 发生冲突)。我想保留 c,但想停止维护链。因为 b 和 c 之间有太多的冲突,简单的变基将是一大堆工作。

所以我想做

a->b
 \->c'

其中 c' 只是 c 中工作区的副本。在 git 中,我会使用 git reset --soft a 并为我的 c' 做一个新的提交,我可以在 mercurial 中做一些等效的事情吗?

所以我要post我最后做了什么,但希望我能得到更好的答案。

  1. 对 a 进行 "do nothing" 提交(在我的例子中,我添加了一行)。我们需要假货,因为从 b 变基到 a 将不再说 nothing to rebase.
a->b->c
\->f
  1. hg rebase -s b -d f --keep 克隆整个分支:
a->b->c
\->f->b'->c'
  1. hg histedit, 折叠 c' 并放下 f.
a->b->c
\->c''
  1. hg prune c
a->b
\->c''

听起来你想使用 revert --all

伪命令(字母ac表示提交的revids):

  1. update -r a
  2. revert --all -r c
  3. commit -m "new c"
  4. strip -r c

可以找到使用 thg GUI 恢复所有内容的指南here