我在Github上分叉了一个项目。
让远程上游为upstream
,远程存储库为origin
。
我的本地master
分支设置为跟踪远程master
分支。
然后我在本地master
添加了一些东西,我偶尔和上游合并。
直到今天,当我想发出拉取请求时,我才发现问题: pull请求包含那些 merge commit ,以及那些我以前无需担心的不需要的提交。然而我想要的只是提交我做的最后一次提交,应该作为单个提交提取。 我能做些什么来拯救这个?
答案 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 的技术,它允许您将功能分支中的更改合并为主分支。