发送针对不同问题的拉取请求-Github

时间:2014-03-14 23:33:06

标签: git version-control github

我已经分叉了一个存储库,克隆它以获得一个本地副本来解决两个问题。让我们称之为问题1和问题2。首先,我应用了三个提交来解决问题1中遇到的问题。然后我做git push origin master将更改从我的本地主分支推送到origin / master。在此之后,我发送了一个拉取请求来修复问题1.因此,问题1的拉取请求附有三个提交。

之后为了解决问题2,我通过upstream创建了另一个名为git checkout -b upstream upstream/master的分支(我相信这会添加一个远程上游(与原始URL相同)并给我一个本地从upstream开始的分支upstream/master

现在我做两个提交来解决问题2,樱桃挑选两个提交git cherry-pick <SHA>(这只是给了我'没有提交'的消息)。在此之后,我做了git push origin upstream来填充我的本地上游分支中的更改。当我向第2期发送一个新的pull请求时,第1期的三个提交附加了我为解决第2个问题所做的两次提交。将所有内容搞砸了。

(后来我也对origin/master进行了第4次提交,以解决问题1中的问题,该问题意味着对问题1的拉取请求,现在附加了4次提交。)

然后在本地我提交了上游分支寻址问题2.我现在想要什么?我希望能够推送此提交并将此提交更新为问题2的拉取请求ALONE,并且我希望将问题1中涉及的4次提交与问题2中涉及的3次提交分开。

到目前为止,一切都搞砸了。我是git和github的新手,有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

  

到目前为止,一切都搞砸了。

这是因为从你的分支发出拉取请求的想法是总是来从专用分支,永远来自master(或任何其他分支)可以在上游原始回购中进化的分支)

另外,您不创建分支名称upstream,添加一个名为upstream的远程引用您已分叉的第一个回购,以便跟踪{ {1}}(来自原始仓库的主人)。

请参阅“Pull new updates from original Github repository into forked Github repository”。

enter image description here

随时您可以这样做:

upstream/master

如果您为git checkout master git pull upstream master git checkout issue1 git rebase master git push -f origin git checkout issue2 git rebase master git push -f origin issue1完成了拉取请求,则issue2(重写这些分支的提交)将触发拉取请求的自动更新,而无需您做任何事。

点击“Couple tips on pull-requests”了解更多信息。


我怀疑你的情况是这个

push -f

首先:rename your "upstream" branch

     (master)
--o--o--o--x--x--x (issue1)
                  \
                   y--y--y  (upstream)

删除名为“ git branch -m upstream issue2 ”的远程上游分支(即cancel the associated pull request,一旦我们在本地修复了分支,您将重新发出该问题的拉取请求)

upstream

现在,请确保 git push :upstream 与来自master的{​​{1}}同步(即,来自您已分叉的原始仓库)。
确保您没有正在进行的工作(master部分会将其删除)

upstream

这将使你的回购看起来像:

reset --hard

现在,您需要在# url of the original repo git remote add upstream https://github.com/user/repo git fetch upstream git checkout master git reset --hard upstream/master 之上<{> 1}} 重新设置,以便将其与 O--O (master, upstream/master) / --o--o--o--x--x--x (issue1) \ y--y--y (issue2) 分开:

master

然后issue2

issue1

你得到:

 git checkout issue2
 git rebase --onto master issue1 issue2

现在,你可以推动这两个分支:

issue1

从那里发出拉动请求。