Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:在没有祖先的情况下推动变更集_Mercurial - Fatal编程技术网

Mercurial:在没有祖先的情况下推动变更集

Mercurial:在没有祖先的情况下推动变更集,mercurial,Mercurial,我有一个来自另一个存储库的“默认”分支。 我在“我的任务”分部工作 当我完成工作后,我从远程存储库中取出修订版7。我将本地变更集6与7合并,并承诺使用8 Rev Branch * 8 Default |\ * \ 7 Default | | | * 6 Mytask | | | * 5 Mytask | | * | 4 De

我有一个来自另一个存储库的“默认”分支。
我在“我的任务”分部工作

当我完成工作后,我从远程存储库中取出修订版7。我将本地变更集6与7合并,并承诺使用8

           Rev  Branch

    *      8    Default
    |\ 
    * \    7    Default
    |  |
    |  *   6    Mytask
    |  | 
    |  *   5    Mytask
    |  |
    *  |   4    Default
    |  |
    * /    3    Default
    |/
    *      2    Default
    |
    *      1    Default
有人知道是否可以只将修订版8推送到远程存储库,而不同时推送带有变更集5和6的Mytask分支


欢迎任何反馈

看看这个问题的答案 . 挤压是本例中的关键词


有一个类似于您想要做的事情以及关于该问题的其他链接。

根据我对您的问题的理解,感觉您希望远程存储库的状态与本地存储库的状态相同。另外,您不需要额外的分支,您需要一个线性历史记录和一个提交

让我们先看两件事,
merge
rebase

最初,您克隆了stable,您提交了自己的变更集,它们是
x
y
,您从远程存储库中提取了变更集,它们是
a
b
c
。现在你的历史是这样的

stable -> a -> b -> c
        \
         \-> x -> y
 stable -> a -> b -> c -> d
        \             /
         \-> x -> y -/
stable -> a -> b -> c -> z
合并

您希望存储库处于这样的状态,而不是希望只有一个头。你选择了合并。您执行了
hg up-rb
hg merge-ry
,解决了存在的合并冲突。现在你的历史是这样的

stable -> a -> b -> c
        \
         \-> x -> y
 stable -> a -> b -> c -> d
        \             /
         \-> x -> y -/
stable -> a -> b -> c -> z
现在您有了一个新的提交
d
,它是一个合并提交。更新到
d
后回购的当前状态包含来自两个父分支机构的更改

重新设置基础

Rebase是Mercurial中的一个扩展,您可以通过在.hgrc中添加一行来轻松使用它。让我们看看在初始状态下执行hg rebase-s x-d c时会发生什么。你的历史如下

stable -> a -> b -> c -> x -> y
在这种情况下,您有一个线性历史,并且您的变更集
x
y
都在稳定分支上

结论

人们倾向于使用
merge
rebase
,以便维护线性历史,这有助于与其他存储库共享更改

在您的情况下,如果合并提交没有子项,您可以通过
hg rollback
hg strip
撤消合并提交。对于儿童,您必须
y
上重新设置其基础,然后
剥离合并提交,然后
重新设置从
x
c
的整个链的基础

从rebase部分(上面)中的DAG,您可以轻松地按下
x
y
。如果您想要单次提交,可以使用
histedit
扩展或
fold
命令,这是
evolve
的一部分,这两个命令都可以将这两次提交折叠/合并/合并/挤压/折叠为一次提交,生成的历史记录如下所示

stable -> a -> b -> c
        \
         \-> x -> y
 stable -> a -> b -> c -> d
        \             /
         \-> x -> y -/
stable -> a -> b -> c -> z
其中
z
包含来自
x
y
变更集的变更

相关链接

请注意,您没有推送“修订版”,即不是代码的快照,而是推送包含代码更改的变更集。因此,如果可能的话,只推送变更集8不会推送您在变更集5和6中所做的更改。