做了一个git commit,git pull并将我的更改推送到了repo。如何为我提交的请求发送Pull请求

时间:2014-07-25 00:05:52

标签: git github

我在网上搜索这个,但找不到解决方案。 这是我的情景,

1)我做了我当地的改变。是git提交的吗?这将获得一个提交ID,例如ABC

2)现在我从上游做了一个git pull。这有一个合并冲突,在解决后会为它创建一个提交。

3)现在我把它们推到了原点。从原点我必须向我的上游发送一个Pull请求。

4)在尝试发送Pull请求时,我看到了这两个提交。

我现在怎样才能发送我所做的提交,即提交ABC(来自步骤#1)

1 个答案:

答案 0 :(得分:0)

分支之间提出拉取请求 - 您要求目标回购的所有者将您的一个分支拉到其中一个分支。

如果你想要一个只包含一次提交的拉取请求,那么你必须得到一个只在该提交中与目标提交不同的分支。

我认为,你现在可以做的最好的事情是git fetch你的上游遥控器,然后从它的一个分支开始创建一个分支。您通常会分支upstream/master(但如果您未在拉取请求中定位master,则可能是不同的分支)。命令git checkout -b my-feature upstream/master可以解决问题 - 前提是这些名称与您拥有的名称相匹配。

如果有效,您现在正在使用一个名为my-branch的全新分支,它指向您upstream master分支点的同一个提交至。此时,您可以git cherry-pick要在PR中显示该单个提交(或者您可以再次手动编辑文件和git commit,因为您更喜欢 - 关键是您获得你在那里完成的提交)。现在,正如您在功能分支中有这个新提交,git push您的分支到您自己的回购(例如,git push origin my-feature)。这将创建(如果它不存在,这将是最好的)my-feature存储库中的origin分支,现在您可以从my-feature创建拉取请求到master的{​​{1}}分支。


根据您的说法,问题似乎是您upstream编辑了您的分支 - 创建合并提交 - 而不是使用git pull。这样,git会自动尝试在目标分支(例如git rebase)之上cherry-pick提交你的提交,并且不会出现任何合并提交。

无论如何,永远不要忘记 git rebase是危险的,如果你不完全理解就不应该使用它。您最好learn more about it first,然后开始猜测何时以及如何使用它。

如果它只是一件事,不要忘记经验法则:永远不要重新公开提交。