2016-12-05 33 views
0

我已分叉托管在Bitbucket上的Mercurial存储库。我没有原始存储库的写入权限。我向我的叉子做了几次提交。让我们称他们为A,B,C和d,即最新的第一:如何为Mercurial中的一个特定提交进行拉取请求?

  • d [最新]
  • Ç
  • 乙< ---拉只在此所做的更改提交
  • [最古老]

现在我想让拉请求在提交乙独家所有的变化,忽视了A,C和D是有办法做到这一点?

回答

2

首先让我们来理解你的图表是怎样的。假设分叉回购的小费是x,它具有线性历史记录,没有分支。所以,你的历史看起来像这样:

[1000's of commits] -> parent(parent(x)) -> parent(x) -> x 

现在你做四次提交即ABCDA是一个最古老和D是最新的一个。现在你绘制看起来是这样的:

x -> A -> B -> C -> D 

注意历史早于x仍完好无损,它上面没有包括在内,因为它不是必需的资料片什么,我们正在讨论。

现在您要创建仅包含B变更集的请求。这是不可能的当前状态,因为主要回购不知道A也是B的父母。在父母不在家的情况下,你不能生孩子。

所以,如果我们只想提出一个B变更集的请求,我们需要rebase它在x

rebase是水银的扩展,你可以通过添加如下行到.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变更pull请求。

相关链接:

Rebase Extension

相关问题