我从我的主分支发出拉取请求。现在该请求正在等待,我想提交另一个请求

时间:2015-08-23 20:22:02

标签: git github version-control

所以,我是Git和Github的新手。

我正在为这个项目做出贡献,我解决了一个问题。

我不知道我不应该从master分支发出pull请求。 现在我的拉取请求正在等待中。我想提出另一个问题的另一个请求。

这就是我所做的。

推送更改为master分支并发出pull请求。现在,我的分叉回购是提前一次提交。

我修复了另一个问题并将更改推送到master分支。在这之后,我意识到出了问题。我的回购现在提前2次提交。我以为你可以发送个人提交的拉取请求,但你不能这样做。

git push -f origin HEAD^:master

我用它来撤消更改。现在我的回购是在原始版本之前的一次提交。我为该特定问题创建了另一个分支。

我的问题是如何删除我刚刚创建的新分支中的master分支提交,然后在此新分支中推送我之前撤消的更改。

现在我的更改是提交并等待推送(新问题)。如果我可以将它恢复到非阶段状态,那么我可以使用git push -f origin HEAD^:<new branch>删除我的第一次提交,然后提交它。

我希望这很清楚。

2 个答案:

答案 0 :(得分:3)

修复您的提款请求

您确定没有其他人通过意外提交审核了pull请求中的更改吗? 如果您确定,那么您可以强制推送本地HEAD^的{​​{1}}到您的GitHub master,您可以自己找到它们:

master

这将有效地从pull请求中删除意外的提交。

如果有人已经审核了您的提款请求中的更改, 那么这一切都不重要。 (也许道歉是由于混乱。)

创建另一个拉取请求

理想情况下, 新的pull请求应该使用基于最新版本的远程主服务器的分支, 在第一次拉取请求中不包括待处理的更改。 这是在处理第二个拉取请求之前创建新分支的方法:

git push -f origin HEAD^:master

如果您的下一个功能取决于待处理的拉取请求, 那么可以从当前的分支创建一个新的分支, 而不是git fetch upstream # assuming that "upstream" is the repo of the project maintainers git checkout -b next-feature upstream/master # hack hack hack git commit -m 'hack hack hack' git push -u origin HEAD # -> Go to GitHub and create the pull request 的新副本。 但是,在这种情况下, 在接受上一个请求之前不要创建拉取请求。 如果你这样做, 并且有人在第1次之前审查第2次拉取请求, 他将看到你在第一次和第二次拉取请求中所做的所有更改, 这可能令人困惑。 等到第一个被接受,然后创建第二个。

答案 1 :(得分:0)

拉取请求适用于分支,并包括该分支上的所有提交,但不包括您提交拉取请求的目标分支上的所有提交。

为了提交第二个独立的pull请求,只需从原始基本提交(即上游主服务器)创建一个新分支,推送该新分支,并从目标相同主服务器的新分支提交pull请求。

因此,如果您的第一个请求只包含一个提交,则可以执行以下操作:

# create a new branch used for the first pull request
git branch pull_request_1

# reset `master` so it points to the commit before your PR
git reset --hard HEAD~1

# create and checkout a new branch for your new pull request
git checkout -b pull_request_2

# do work and commit
git commit …

# push the new branch
git push origin pull_request_2

现在,您还可以推送pull_request_1分支,并强制推送您的fork master,使其再次与上游分支匹配,但由于您的第一个请求引用了master分支,不是当时不存在的pull_request_1分支,这会影响您的拉取请求。因此,最好的选择就是等到第一个拉取请求得到解决。但是对于未来,您应该始终考虑为您创建的每个pull请求创建一个新分支,这样您就不会混淆实际属于上游存储库的提交,也不会混淆您想要独立提交的提交。 / p>