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

发送不同问题的拉取请求Github,git,version-control,github,Git,Version Control,Github,我已经创建了一个存储库,克隆了它以获得一个本地副本来处理两个问题。我们将它们称为问题1和问题2。首先,我应用了三个承诺来解决问题1中面临的问题。然后我做了git push origin-master,将更改从本地master分支推送到origin/master。在此之后,我发送了一个请求来修复问题1。因此,问题1的pull请求附带了三个提交 在那之后,为了解决问题2,我通过git checkout-b upstream upstream/master创建了另一个名为upstream的分支(我相信

我已经创建了一个存储库,克隆了它以获得一个本地副本来处理两个问题。我们将它们称为问题1和问题2。首先,我应用了三个承诺来解决问题1中面临的问题。然后我做了
git push origin-master
,将更改从本地master分支推送到origin/master。在此之后,我发送了一个请求来修复问题1。因此,问题1的pull请求附带了三个提交

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

现在我做了两次提交来解决问题2,cherry pick用git cherry pick(它只给了我“无需提交”的消息)完成两次提交。在此之后,我做了
git将origin推送到上游
,用origin中的更改填充本地上游分支中的更改。当我向问题2发送一个新的请求时,问题1的三个提交与我为解决问题2所做的两个提交一起被附加。把一切都搞砸了

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

然后在当地,我向上游分支承诺解决问题2。我现在想要什么?我希望能够单独推送此提交并更新此提交到问题2的拉请求,并且我希望将问题1中涉及的4个提交与问题2中涉及的3个提交分开

现在一切都有点乱。我是git和github的新手,有人能帮我吗

现在一切都有点乱

这是因为从您的fork发出pull请求的想法始终是从专用分支发出请求,而不是从
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
执行了拉取请求,
push-f
(重写这些分支的提交)将触发拉取请求的自动更新,而无需执行任何操作

请参阅“”中的更多内容


我猜你的情况就是这样

     (master)
--o--o--o--x--x--x (issue1)
                  \
                   y--y--y  (upstream)
第一::

删除名为“
upstream
”的远程上游分支(这将发生,一旦我们在本地修复了分支,您将重新生成该问题的请求)

现在,确保您的
master
与上游
master
同步(也就是说,从您分叉的原始回购中)。
确保您没有正在进行的工作(重置--hard
部分会将其删除)

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

          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
git issue1
git rebase master
然后
发布1

 git checkout issue2
 git rebase --onto master issue1 issue2
git issue1
git rebase master
你会得到:

                x--x--x (issue1)
               /
--o--o--o--O--O  (master, upstream/master)
               \
                y--y--y  (issue2)
现在,您可以推动这两个分支:

git push -f -u origin issue1
git push -f -u origin issue2

然后从那里发出请求。

到目前为止,我还没有名为issue1或issue2的分支。我曾在master中处理过问题1(我现在意识到这不是正确的做法),但我已经完成了。Issue2位于名为upstream的分支上(我不知道为什么将该分支命名为upstream)。当我发送拉请求时,我不希望主服务器上的issue1提交干扰上游的issue2提交。但不知何故,当我从上游分支发送对issue2的拉取请求时,它也包含了我对issue1所做的4次提交——这是我不想要的。我该怎么做?@user1955184没问题:你可以按设定的方式重置所有内容。请参阅我编辑的答案。
git push -f -u origin issue1
git push -f -u origin issue2