我已分叉托管在Bitbucket上的Mercurial存储库。我没有原始存储库的写入权限。我向我的叉子做了几次提交。让我们称他们为A,B,C和d,即最新的第一:如何为Mercurial中的一个特定提交进行拉取请求?
- d [最新]
- Ç
- 乙< ---拉只在此所做的更改提交
- 一[最古老]
现在我想让拉请求在提交乙独家所有的变化,忽视了A,C和D是有办法做到这一点?
我已分叉托管在Bitbucket上的Mercurial存储库。我没有原始存储库的写入权限。我向我的叉子做了几次提交。让我们称他们为A,B,C和d,即最新的第一:如何为Mercurial中的一个特定提交进行拉取请求?
现在我想让拉请求在提交乙独家所有的变化,忽视了A,C和D是有办法做到这一点?
首先让我们来理解你的图表是怎样的。假设分叉回购的小费是x
,它具有线性历史记录,没有分支。所以,你的历史看起来像这样:
[1000's of commits] -> parent(parent(x)) -> parent(x) -> x
现在你做四次提交即A
,B
,C
和D
与A
是一个最古老和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请求。
相关链接: