这是我想要做的。我有默认分支的默认分支提交。我们从默认构建生产,并且此提交尚未准备好。所以我使用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是需要移出默认值的提交的修订版。
但我认为我做错了。
答案 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
|