如果你在自己的分支里做过C2,你需要做的就是:
- 用 upstream/master 更新你的 master
- 将 C2 分支重新定位到上游/主控之上
- 从 C2 分支发出拉取请求。
请注意,如果您在 upstream/master 之上 rebase 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 之上进行任何变基,这会触发对现有拉取请求的更新(但这次,使用来自变基master 的C1 和C2,因为我在我的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)
(旧的C1commit 不再被任何东西引用,所以在reflog 中消失了,可用于revert improper rebase, for instance)
您现在可以从 bC2 分支发出拉取请求,该分支仅包含 C2 提交!