Github:在拉取请求后清理分支

10
我已经fork了一个GitHub仓库,进行了一次提交(标题为“Some small changes”),并提交了一份拉取请求,该请求已合并到主仓库中(提交标题为“Some small changes (#12)”,其中“#12”是拉取请求编号)。至此,一切都很好。
现在,当我想要更新我的fork时(使用“git rebase upstream/master”,请参见这里),我在我的仓库中有两个相同的提交。一个是“Some small changes”,另一个是“Some small changes (#12)”。“#12”是指拉取请求编号。如果我创建一个新的拉取请求,那么“Some small changes”提交将再次添加到拉取请求中。
解决此问题有两种方法:
  1. 清理我的fork,请参见此答案
  2. 将所有提交合并为一个,请参见此答案
两种情况都涉及重写我的历史记录,并需要强制推送。有没有更好的方法来保持fork与提交拉取请求的同步?
1个回答

17

是的。我认为有几种方法可以实现这一点,但以下是我通常的做法。

如果您想要向Github上的存储库贡献代码,我们称之为upstream

在GitHub上,您需要先fork upstream 存储库,并将其命名为origin

然后在您的开发计算机上,您需要克隆origin 存储库,以便您可以在本地工作。我们称之为local。在克隆此存储库时,您很可能已经将origin设置为远程存储库。您还需要将upstream存储库添加为远程存储库。

当您要进行更改时,请勿在master分支上进行更改。而是创建一个新分支来进行更改。例如:fix-issue-101

一旦您对所做的更改满意,您就需要将您在local存储库中的更改推送到origin存储库。现在您可以从origin上的fix-issue-101分支创建一个Pull Request请求,将更改合并到upstream上的master分支中。

在等待Pull Request请求被接受的同时,您可以继续在localorigin上创建新分支,以便随时可以创建其他的Pull Request请求。

upstream上的master发生更改时,也就是您的Pull Request请求已经被接受,您需要将upstream上的master拉到local上的master。然后,您需要将local上的master推送到origin上的master。完成这些步骤之后,所有存储库的master分支将保持同步。

我希望我的表述清晰易懂,如果不清楚的话,请随时提问,我会及时更新。


非常感谢,你的回答很清晰,比我之前使用的方法要好得多。 - Julian Helfferich
1
这是一个很好的答案,清晰明了,不假设对起源、上游和本地术语有任何了解。 - Fernando
2
此外,GitHub允许您在合并拉取请求后一键删除远程分支。当拉取请求被合并后,“删除分支”按钮将出现在页面底部的拉取请求页面上。 - Julian Helfferich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接