我分叉了一个项目,进行了更改(C1)并提出了仍处于待处理状态的拉取请求。一周后,我想提出另一个带有更改的拉取请求(C2)。
同时,上游(我从那里分叉)发生了很多变化。所以我想将我的主人与上游同步,并且需要单独提供带有更改 C2 的拉取请求(无需添加更改 c1,因为我已经为此提供了单独的拉取请求)。
注意:我没有任何分支。我在我的主人中提交了 C1 并提出了拉取请求。是否更改了 C2。但这一次,我不知道在哪里提交 C2 以及如何在不添加 C1 的情况下发出拉取请求。
我分叉了一个项目,进行了更改(C1)并提出了仍处于待处理状态的拉取请求。一周后,我想提出另一个带有更改的拉取请求(C2)。
同时,上游(我从那里分叉)发生了很多变化。所以我想将我的主人与上游同步,并且需要单独提供带有更改 C2 的拉取请求(无需添加更改 c1,因为我已经为此提供了单独的拉取请求)。
注意:我没有任何分支。我在我的主人中提交了 C1 并提出了拉取请求。是否更改了 C2。但这一次,我不知道在哪里提交 C2 以及如何在不添加 C1 的情况下发出拉取请求。
如果您在自己的分支中完成了 C2,那么您需要做的就是:
请注意,如果您在 upstream/master 之上 rebase C1 分支,您现有的拉取请求将自动更新!
另请参阅“如何进行 Github 拉取请求? ”。
C1
我向我的主人承诺并提出了拉取请求。
我做了更改C2
,不知道在哪里提交以及如何在不添加C1
.
这是我的问题。
所以你有了:
y--y--y--y (origin/master)
\
x--C1--C2 (master)
首先,不要在 顶部 做任何变基origin/master
,这会触发对现有拉取请求的更新(但这次,正如我在拉取请求提示中提到的,在第二点中,使用C1
和C2
来自你的变基)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
提交的分支执行拉取请求!
在每次 PR 之前,您都应该了解 master 分支的最新信息。这意味着 PR 的顺序对您来说并不重要。最后 master 分支(和可能的新分支)将包含所有更改。