2013-07-03 188 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的順序對你來說並不重要。最終主分支(和可能的新分叉)將包含所有更改。