在GitHub上执行pull请求时,避免不必要的合并提交和其他提交

时间:2011-05-11 18:37:53

标签: git github

我在Github上分叉了一个项目。

让远程上游为upstream,远程存储库为origin。 我的本地master分支设置为跟踪远程master分支。 然后我在本地master添加了一些东西,我偶尔和上游合并。

直到今天,当我想发出拉取请求时,我才发现问题: pull请求包含那些 merge commit ,以及那些我以前无需担心的不需要的提交。然而我想要的只是提交我做的最后一次提交,应该作为单个提交提取。 我能做些什么来拯救这个?

5 个答案:

答案 0 :(得分:27)

而不是合并你想要变基。您可以手动执行此操作,也可以在拉动时自动执行此操作。

git pull --rebase upstream master
git push --force origin master

一旦你开始进行合并,虽然这很难做到,但你需要在进行合并提交之前将分支重置为。

答案 1 :(得分:10)

如果我理解你的问题,你想要摆脱你在分支中所做的中间/一次性提交。尝试这样的事情:

git checkout -b for-upstream remotes/origin/master (create a new branch from the upstream origin)
git cherry-pick <sha-of-the-one-commit-you-want-to-submit> (fix any conflicts if necessary)

这应该给你一个本地的“for-upstream”分支,它只包含上游主服务器和你的1个提交。然后,您可以提交该分支以获取拉取请求

答案 2 :(得分:6)

在Github上,您无法为分支上的单个特定签入创建拉取请求,该分支具有将其与上游分开的多个签到。

专门为您打算制作的每个拉取请求创建一个分支。这使您可以继续工作而不必担心污染拉取请求。

答案 3 :(得分:3)

这会有用吗: 仅使用您想要的提交创建一个单独的分支,并在该分支上发出拉取请求。

答案 4 :(得分:0)

这看起来像是对您问题的回答(主题“更新2011-04-15”部分):

Git workflow and rebase vs merge questions

Micah描述了 squash merges 的技术,它允许您将功能分支中的更改合并为主分支。