2013-07-03 116 views
2

我分叉了一个项目,做了改变(C1),并提出了仍处于待决状态的请求。一个星期后,我想给变化(C2)另一个拉请求。Github - 需要帮助给予拉请求

同时,上游(我从中分叉)得到很多变化。所以我想同步我的主与上游,并需要提供更改C2的拉请求单(无需添加更改C1,因为我已经给这个单独的拉请求)。

注意:我没有任何分支。我在我的主人承诺C1,并给予 拉请求。做了改变C2。但是这一次,我不会在哪里提交C2以及如何在不添加C1的情况下提供请求 请求。

+0

在[我的答案](http://stackoverflow.com/a/17447104/6309)中添加的详细步骤是否帮助您在不包含'C1'的情况下对'C2'进行拉取请求? – VonC

+0

我还没试过。但是你解释的方式是有道理的。我认为你在这方面有着丰富的经验。 :) – user10

回答

4

如果您在自己的分公司完成C2,所有你需要做的是:

  • 更新您与上游/大师主
  • 变基上游/大师
  • 的顶端的C2分支从C2分支发起你的拉动请求。

enter image description here

需要注意的是,如果你在上游/大师的顶底垫C1分公司,现有的拉请求将被自动更新!另请参阅“How to do a Github pull request?”。


OP user10增加in the comments

我致力于在我的主人C1又给拉请求。
我做了更改C2,不知道在哪里提交,以及如何在不添加C1的情况下发出拉取请求。
这是我的问题。

所以,你必须:

y--y--y--y (origin/master) 
\ 
x--C1--C2 (master) 

首先,不要做任何变基上的origin/master顶部,这将触发对现有的拉请求更新(但此时,与C1C2从你衍合master,正如我在pull request tips提到,在第二点)

确保C2 is in own branch

git checkout master 
git branch bC2 
git reset --hard master C2~ 
git tag C2base master 

如果C2由几个连续的提交,取代C2~由第一提交C2系列,然后是“~”。
这个假设C2提交按照C1提交。

确保您没有任何工作正在进行中(未提交):'reset --hard'会清除这些内容。

请注意,标签C2base引用C2之前的提交。我们将在下面需要它。

y--y--y--y (origin/master) 
\ 
x--C1  (master) 
    ^\ 
    | --C2 (bC2) 
(C2base) 

然后,git pull --rebase origin将重播之上origin/master你的主人。

y--y--y--y   (origin/master) 
\   \ 
|   x'--C1' (master) 
| 
x--C1  
    ^\ 
    | --C2 (bC2) 
(C2base) 

注意如何C1送过来复制,并且仍然通过bC2分支引用。

最后,确保你的bC2分支上的origin/master顶部做有很好:

git rebase --onto origin/master C2~ bC2 
git tag -d baseC2 

它给你:

  C2'  (bC2) 
     /
y--y--y--y   (origin/master) 
      \ 
      x'--C1' (master) 

(旧C1承诺通过任何不再被引用,所以它消失在reflog,它可以用于revert improper rebase, for instance

而你n ow可以从bC2分支完成您的请求,该分支仅包含C2提交!

+0

+1。真的有帮助 – user10

+0

我没有分支机构。我在主人身上投入了C1并给出了请求。我修改了C2,并且不知道在哪里提交,以及如何在不添加C1的情况下发出拉取请求。这是我的问题。 – user10

+0

@ user10当然。我编辑了答案,以包含您的案例中所需的详细命令序列。 – VonC

0

在每个PR之前,您应该与主分支保持同步。这意味着PR的顺序对你来说并不重要。最终主分支(和可能的新分叉)将包含所有更改。