GitHub - 如何在存在多个提交的情况下提交单独的拉取请求

16

我已经对我的本地代码库进行了多次提交,现在我打算发起 pull request 将这些更改提交到源代码/主代码库。

当我发起 pull request 时,它会自动包括我所有的提交。我找不到一种方法来单独提交每个提交至一个 pull request 中。是否有人能够指导如何在 GitHub 上实现这个目标。

更新 为了澄清这个问题,我从上游/主代码库 fork 了一个新的本地代码库。然后,在我作为新手的愚蠢中,我直接在本地主代码库中创建了新文件,而没有先将代码库分支化。因此,我的问题是:对于已提交到本地主代码库的这些更改,是否有一种方法可以逐个文件提出 pull request,而不是一次性提交所有文件。

非常感谢。

2个回答

20

我不确定GitHub是否有更好的方法,但通常情况下,您可以为每个拉取请求创建一个新分支,并为每个请求选择要使用的提交。

最好基于上游主分支创建新分支,以使合并更加轻松。

使用命令行git时,将origin用作您自己的GitHub远程存储库,upstream是上游远程存储库:

git checkout -b {my_pull_request_feature_branch} upstream/master
git cherry-pick {sha1_of_first_commit_for_feature_X} [sha1_of_another_commit_for_feature_X] ...
git push origin {my_pull_request_feature_branch}

对于每个拉取请求,请重复执行此操作。

在GitHub上提出拉取请求时,您可以选择要发送请求的分支。


谢谢。现在更清楚了。所以,如果我理解正确,我应该从“上游”主分支开始进行分叉。这样,我就可以得到自己的本地副本来进行工作。之后,我使用 - git checkout -b branch1 创建一个新分支,并在其中创建新文件/进行一些工作。完成后,我应该启动一个拉取请求 - git push upstream branch1.....在我的情况下,我所做的是 - 作为一个完全的新手,我分叉了上游,并直接向主分支添加了新文件,而没有创建任何分支。现在主分支有了新文件,如果我创建一个新分支,它也将拥有这些新文件。该怎么办? - Sunshine
解决主分支有新文件的问题,是基于上游/主分支而不是自己的主分支创建功能分支。如果您按照我上面的建议操作,您将拥有一个仅包含您想要发送到上游的更改的功能分支。当您准备好发送拉取请求时,将您的功能分支推送到origin/branch1,而不是上游。 - Joakim Nohlgård
这样做是可行的,但在添加上游远程之后,我必须运行git remote update以便git了解upstream/master - Philip

6
提交并不是独立的,它总是链接到完整的之前历史记录。因此,如果您要求拉取依赖于您的提交A的提交B,则您也要求拉取A,因为B中的工作依赖于它。
如果您想提交多个独立的拉请求,请确保这些提交彼此完全独立。因此,它们应该位于自己的分支上。这也使得项目维护者更容易集成您的拉请求,因为他们可以只合并分支而无需挑选操作。

谢谢@poke。我添加的新文件彼此独立。 - Sunshine
文件可能会改变,但提交不会。提交包含整个工作目录的快照,而不仅仅是单个文件或差异。 - poke
有了,我刚开始使用git并fork了新的repo。除了添加这些新文件之外没有做任何更改。谢谢。 - Sunshine

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