我分叉了一个项目,做了更改(C1)并给出了仍处于待定状态的拉取请求。一周之后,我想给另一个带有更改的拉取请求(C2)。
与此同时,上游(我从哪里分叉)会有很多变化。所以我想要将我的主服务器与上游同步,并且需要单独更改C2来提供pull请求(不需要添加更改c1,因为我已经为此提供了单独的pull请求)。
注意:我没有任何分支机构。我在我的主人中犯了C1并给了他 拉请求。做了改变C2。但这一次,我不知道C2在哪里以及如何拉动 请求而不添加C1。
答案 0 :(得分:4)
如果您在自己的分支中完成了C2,那么您需要做的就是:
请注意,如果您在上游/主站顶部重新绑定C1分支,您的现有拉取请求将自动更新!
另请参阅“How to do a Github pull request?”。
我已将
C1
提交给我的主人并提出拉取请求 我做了更改C2
,并且不知道在哪里提交以及如何在不添加C1
的情况下提取请求。
这是我的问题。
所以你有:
y--y--y--y (origin/master)
\
x--C1--C2 (master)
首先,不要在origin/master
之上进行任何重组,这会触发现有拉取请求的更新(但这一次,来自您已定居的C1
和C2
master
,正如我在 pull request tips 中提到的,在第二点)
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)将包含所有更改。