从 fork 创建新的拉取请求,而无需提交前一个 fork

Create new pull request from fork without having commits of the previous fork

所以我对别人的回购的分支做了一些提交,然后提交了相同的拉取请求。我的旧拉取请求尚未合并,现在我需要提交一个新的拉取请求,而不需要以前的提交,但是我要对我的分叉进行新的更改(我需要我的旧拉取请求及其提交也留下)。我该怎么做?

要真正理解这一点,我们需要定义一些东西。

首先,这里有点问题,因为 "pull request" 本身不是 Git。您已经包含了标签 and GitHub does define "pull request"—in fact, they've re-defined it at least once; see this early 2013 answer from VonC, revised numerous times afterward——但并不是每个人都使用完全相同的定义(不仅仅是其中有趣的 Fox Business 图像,在具体细节上存在真正的分歧,正如刚才提到的,甚至 GitHub 本身不同意自己)。但它们都有一些共同的特点。一般的想法是至少有两个人参与:你自己和其他人。 你的目标是让其他人将的工作融入他们的工作。为此,你想让他们尽可能轻松。

接下来,还有另一个问题,因为 "fork" 是 而不是 Git 本身。 SO 问题 Are git forks actually git clones? 正确说明了这一点:

I keep hearing people say they're forking code in git. Git "fork" sounds suspiciously like git "clone" plus some (meaningless) psychological willingness to forgo future merges. There is no fork command in git, right?

Github makes forks a little more real by stapling correspondence onto it. That is, you press the fork button and later, when you press the pull request button, the system is smart enough to email the owner. Hence, it's a little bit of a dance around repo ownership and permissions.

(VonC 再次给出了一个很好的答案:是的,"fork" 的克隆,但在 GitHub 服务器端完成,使用那些额外的属性、权限等)。使用此服务器端克隆可以让同时使用 GitHub 的人更轻松地收回您的工作。 不过,最终可能是 git merge,因为 GitHub 在幕后使用 git merge(有时使用 --squash)。 它可能有一些 web GUI clicky 按钮,使它更容易。

回到你的问题

So i've made a few commits to my fork of someone else's repo, and then submitted a pull request for the same. My old pull request hasn't been merged yet, and now i need to submit a new pull request without the previous commits, but with new changes that i'm going to make to my fork (i need my old pull request with its commits to stay, too). How can i do this?

其中一些取决于 "someone else"。但是:

  • 如果您将每个拉取请求 ("please incorporate this work") 隔离到您自己的一个分支;和
  • 如果你准备好那个分支提示与他们的分支提示合并,这样他们就可以很容易地git merge它,也许用一个点击按钮

那么对于他们来说,您确实尽可能地让事情变得简单了。

"your fork"——我们指的是 "your clone as maintained on GitHub"——是否重要以及有多少重要取决于他们将如何获得你的提交和合并(或决定 是否 合并)。但是,将每组提交放在它自己的分支上,同时在你的分支中保留一些分支——通常但不总是命名为 master——与它们的 中的一些可能同名的分支保持同步 分支,即他们在 GitHub 上维护的克隆——应该有预期的效果。

完成所有这些意味着您的提交成为他们可以轻松添加到他们的存储库的东西。此外,当他们使用点击按钮时——如果这是他们的计划和方法的话——你的提交将以某种方式被复制到他们的存储库中(如果是常规合并,直接复制加上合并提交;如果压缩 "merge").完成后,将在你的部分进行最少的工作来更新你的分叉说明他们纳入了您的工作。

(免责声明:我不使用 GitHub 上的点击按钮。:-) 我只是将您的提交直接加载到我的存储库中,在我的机器上,我可以使用命令完全控制-线接口。)