Hg退出,然后进行更改并存储在分支上

时间:2014-04-13 23:41:40

标签: mercurial

这是我想要做的。我有默认分支的默认分支提交。我们从默认构建生产,并且此提交尚未准备好。所以我使用hg backout撤消默认分支的更改。现在我创建了一个新分支来存储更改。但是当我试图将这些变化移植或移植到分支上时,我被告知我无法移植来自祖先的变化。这是有道理的,但我需要从祖先那里获取变化,我该怎么做。

我试过了

hg diff -c 8c13fc133926 > new_branch.diff
hg import new_branch.diff

但这失败了没有解释。有什么指针吗?

编辑

我似乎有点难以理解,所以我会尽力澄清。

o Default with only ready changes
|
| o Not ready changes (new commit on a branch)
| | 
|/
o   Hg backout commit Undoing not ready changes from default
| 
o   Lots of other commits and merges to default
| 
o   ...
| 
o   Not ready changes (original commit)

上图显示了我需要去的地方。 我通过使用hg diff -c 6877 | patch -p1来完成此操作,其中6877是需要移出默认值的提交的修订版。

但我认为我做错了。

2 个答案:

答案 0 :(得分:2)

使您的新分支脱离修订之前您已做出"未准备好的更改"承诺。我将称之为修订版123:

hg up 123
hg branch NewBranch
hg ci -m "branching for NewBranch"

现在您可以执行 GRAFT ,而不用担心祖先。

捆绑松散的目标:

您似乎已经在NewBranch上找到了另一个人,就是您说的那个人。您可以与它合并或只是关闭它。你可以看到头部:

hg heads NewBranch

我会打电话给那个不受欢迎的头部修订版456.我会这样关闭它:

hg up 456
hg ci --close-branch -m "It was all just a dream... a terrible, terrible dream."

这提醒我:您可以使用相同的技术(关闭不需要的分支头)而不是hg backout!然后你就可以完成上面的步骤...除了你能够做一个整洁的REBASE("没有留下任何证人和#34;就像他们在电影里说的那样)而不是樱桃 - 使用GRAFT,并在默认分支上留下残骸!

答案 1 :(得分:1)

我个人尽可能避免嫁接,你的提交已经在历史上了。您似乎正在使用正确的命令,但很难理解您的问题,需要更多信息。

如何从要退出的提交中创建新分支?

  o    NewBranch: head, creation of the branch
  |
  |
o |    default: head, Backed-out changeset
| |
|/
o      default: commit (not ready)
|
|
o      default: initial state
|

另一个想法,如果你不关心嫁接,只需从initial state启动你的新分支,然后移植提交;它将不再被视为祖先了。

    o    NewBranch: head, grafted commit
    |
   /|
  | o    NewBranch: creation
  | |
  | |
o | |    default: Backed-out changeset
| | |
|/  |
o  /     default: commit (not ready)
| / 
|/
o        default: initial state
|