我在网上搜索这个,但找不到解决方案。 这是我的情景,
1)我做了我当地的改变。是git提交的吗?这将获得一个提交ID,例如ABC
2)现在我从上游做了一个git pull。这有一个合并冲突,在解决后会为它创建一个提交。
3)现在我把它们推到了原点。从原点我必须向我的上游发送一个Pull请求。
4)在尝试发送Pull请求时,我看到了这两个提交。
我现在怎样才能发送我所做的提交,即提交ABC(来自步骤#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,然后开始猜测何时以及如何使用它。
如果它只是一件事,不要忘记经验法则:永远不要重新公开提交。