Github - 在提出拉取请求时需要帮助

时间:2013-07-03 10:49:24

标签: github

我分叉了一个项目,做了更改(C1)并给出了仍处于待定状态的拉取请求。一周之后,我想给另一个带有更改的拉取请求(C2)。

与此同时,上游(我从哪里分叉)会有很多变化。所以我想要将我的主服务器与上游同步,并且需要单独更改C2来提供pull请求(不需要添加更改c1,因为我已经为此提供了单独的pull请求)。

  

注意:我没有任何分支机构。我在我的主人中犯了C1并给了他   拉请求。做了改变C2。但这一次,我不知道C2在哪里以及如何拉动   请求而不添加C1。

2 个答案:

答案 0 :(得分: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

您现在可以从bC2分支执行拉取请求,该分支仅包含C2次提交!

答案 1 :(得分:0)

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