Github:拉取请求后清理分叉

Github: Clean up fork after pull request

我已经分叉了一个 github 存储库,进行了提交(标题 Some small changes),提交了拉取请求并将其合并到主存储库中(提交标题 Some small changes (#12),其中#12 是拉取请求编号)。到目前为止,还不错。

现在,当我想更新我的复刻时(git rebase upstream/master,请参阅 here),我在我的存储库中有两次提交。首先是 Some small changes,然后是 Some small changes (#12)。如果我创建一个新的拉取请求,Some small changes 提交将再次添加到拉取请求中。

有两种方法可以解决此问题:

  1. 清理我的叉子,看this answer
  2. 将所有提交合并为一个,参见this answer

这两种情况都涉及重写我的历史并且不得不 force-push。在提交拉取请求时,是否有更好的方法让您的分叉保持同步?

是的。我假设有几种方法可以做到这一点,但这是我所做的。

所以你想为 github 上的存储库做贡献,我们称之为 upstream

在 github 上,您将分叉 upstream 存储库。让我们称之为 origin.

然后在您的开发机器上克隆 origin 以便您可以处理代码。让我们称之为 local。当您克隆此存储库时,您很可能已经将 origin 设置为远程存储库。您还需要将 upstream 存储库添加为远程存储库。

然后当你想进行更改时,不要在 master 分支上进行此更改。而是为您的更改创建一个新分支。即 fix-issue-101

一旦您对所做的更改感到满意,您将希望将更改从 local 存储库推送到 origin 存储库。 您现在可以在 upstream 上创建从 origin 上的 fix-issue-101 分支到 upstream 上的 master 分支的拉取请求。

您可以在等待合并请求被接受的同时继续在 localorigin 上创建分支,从而创建额外的合并请求。

upstream 上的 master 发生变化时,即您的 Pull Request 被接受,您将从 upstream 上的 master 拉到 master local。然后,您将 local 上的 master 推到 origin 上的 master。这样做之后,所有存储库的 master 分支将恢复同步。

我希望我以一种可以理解的方式写了这篇文章。如果有问题,请随时提问,我会相应更新。