2

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

同时,上游(我从那里分叉)发生了很多变化。所以我想将我的主人与上游同步,并且需要单独提供带有更改 C2 的拉取请求(无需添加更改 c1,因为我已经为此提供了单独的拉取请求)。

注意:我没有任何分支。我在我的主人中提交了 C1 并提出了拉取请求。是否更改了 C2。但这一次,我不知道在哪里提交 C2 以及如何在不添加 C1 的情况下发出拉取请求。

4

2 回答 2

4

如果您在自己的分支中完成了 C2,那么您需要做的就是:

  • 用 upstream/master 更新你的 master
  • 将您的 C2 分支重新设置在上游/主控之上
  • 从 C2 分支发出拉取请求。

在此处输入图像描述

请注意,如果您在 upstream/master 之上 rebase C1 分支,您现有的拉取请求将自动更新!

另请参阅“如何进行 Github 拉取请求? ”。


OP user10在评论中添加:

C1我向我的主人承诺并提出了拉取请求。
我做了更改C2,不知道在哪里提交以及如何在不添加C1.
这是我的问题。

所以你有了:

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

首先,不要在 顶部 做任何变基origin/master,这会触发对现有拉取请求的更新(但这次,正如我在拉取请求提示中提到的,在第二点中,使用C1C2来自你的变基)master

确保C2 在自己的分支中

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)

然后 agit pull --rebase origin将在 top 上重播您的 master 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中消失了,这可以用来恢复不正确的 rebase,例如

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

于 2013-07-03T11:46:14.167 回答
0

在每次 PR 之前,您都应该了解 master 分支的最新信息。这意味着 PR 的顺序对您来说并不重要。最后 master 分支(和可能的新分支)将包含所有更改。

于 2013-07-03T11:08:05.273 回答