Version control 如何在Mercurial中仅对一个特定的提交发出请求?

Version control 如何在Mercurial中仅对一个特定的提交发出请求?,version-control,mercurial,fork,bitbucket,pull,Version Control,Mercurial,Fork,Bitbucket,Pull,我已经创建了一个托管在Bitbucket上的Mercurial存储库。我没有原始存储库的写入权限。我对我的叉子做了几次承诺。让我们称它们为A、B、C和D,即最新优先: D[最新] C B首先,让我们了解您的图形是什么样子的。让我们假设您的分叉回购的尖端是x,并且它具有没有分支的线性历史。因此,您的历史记录如下所示: [1000's of commits] -> parent(parent(x)) -> parent(x) -> x x -> A -> B -&g

我已经创建了一个托管在Bitbucket上的Mercurial存储库。我没有原始存储库的写入权限。我对我的叉子做了几次承诺。让我们称它们为A、B、C和D,即最新优先:

  • D[最新]
  • C

  • B首先,让我们了解您的图形是什么样子的。让我们假设您的分叉回购的尖端是
    x
    ,并且它具有没有分支的线性历史。因此,您的历史记录如下所示:

    [1000's of commits] -> parent(parent(x)) -> parent(x) -> x
    
    x -> A -> B -> C -> D
    
    现在您进行了四次提交,即
    A
    B
    C
    D
    ,其中
    A
    是最早的一次,而
    D
    是最新的一次。现在您可以看到如下图形:

    [1000's of commits] -> parent(parent(x)) -> parent(x) -> x
    
    x -> A -> B -> C -> D
    
    请注意,早于
    x
    的历史记录仍然完整,上面没有包括它,因为我们讨论的内容不需要它

    现在您想要创建一个只包含
    B
    changeset的请求。在当前状态下,这是不可能的,因为主回购协议不知道
    A
    也是
    B
    的父项。在孩子的父母不在场之前,你不能生孩子

    因此,如果我们只想对
    B
    changeset发出pull请求,我们需要
    rebase
    on
    x

    rebase
    是Mercurial中的一个扩展,您可以通过在
    .hg/hgrc

    [extensions]
    rebase = 
    
    启用扩展后,让我们重新设置基础

    hg rebase -s B -d x
    
    这将导致:

    x -> A
       \-> B -> C -> D
    
    现在您可以创建拉取请求,因为
    B
    的父级是
    x
    。您还可以通过将
    C
    重新设置为
    A
    来获得更清晰的历史状态。它将导致两个分支,一个包含要推送的变更集,另一个包含本地变更集。重新定基看起来像:

    hg rebase -s C -d A
    
    由此产生的历史状态是:

    x -> A -> C -> D
       \-> B
    
    您现在可以轻松地创建一个只包含
    B
    changeset的请求

    相关链接:


    首先,让我们了解图形的外观。让我们假设您的分叉回购的尖端是
    x
    ,并且它具有没有分支的线性历史。因此,您的历史记录如下所示:

    [1000's of commits] -> parent(parent(x)) -> parent(x) -> x
    
    x -> A -> B -> C -> D
    
    现在您进行了四次提交,即
    A
    B
    C
    D
    ,其中
    A
    是最早的一次,而
    D
    是最新的一次。现在您可以看到如下图形:

    [1000's of commits] -> parent(parent(x)) -> parent(x) -> x
    
    x -> A -> B -> C -> D
    
    请注意,早于
    x
    的历史记录仍然完整,上面没有包括它,因为我们讨论的内容不需要它

    现在您想要创建一个只包含
    B
    changeset的请求。在当前状态下,这是不可能的,因为主回购协议不知道
    A
    也是
    B
    的父项。在孩子的父母不在场之前,你不能生孩子

    因此,如果我们只想对
    B
    changeset发出pull请求,我们需要
    rebase
    on
    x

    rebase
    是Mercurial中的一个扩展,您可以通过在
    .hg/hgrc

    [extensions]
    rebase = 
    
    启用扩展后,让我们重新设置基础

    hg rebase -s B -d x
    
    这将导致:

    x -> A
       \-> B -> C -> D
    
    现在您可以创建拉取请求,因为
    B
    的父级是
    x
    。您还可以通过将
    C
    重新设置为
    A
    来获得更清晰的历史状态。它将导致两个分支,一个包含要推送的变更集,另一个包含本地变更集。重新定基看起来像:

    hg rebase -s C -d A
    
    由此产生的历史状态是:

    x -> A -> C -> D
       \-> B
    
    您现在可以轻松地创建一个只包含
    B
    changeset的请求

    相关链接: