我最近遇到了一种情况,当我从本地上游进行rebase,然后尝试在github上推送到我的本地PR时,我的错误修复请求被搞砸了。 我想知道我是否采取了正确的方式,或者我的工作流程需要改变。
基本上,我遵循了这个工作流程:
fix
分支。 git push -u origin fix
并从该分支机构提交PR。git fetch upstream; git merge upstream/master
git push
。git rebase master
分支上本地fix
,由于冲突而手动合并它们。 git add; git rebase --continue
。git push
,那就是出错的地方。似乎没有一个很好的干净方法将rebase fix
分支放入我的公关。所以我想知道我是否错过了一步,或者我是否应该改变一步。我不确定git push origin
是否正确,或者是否需要更具体(例如,使用分支名称)。应该/我可以在最后一步尝试使用git push --force
(PR的一部分在我的github存储库中,但很可能没有其他地方被删除)吗?
答案 0 :(得分:11)
不要在拉取请求中引入合并。正确的工作流程如下:
git pull --rebase upstream master
这样就可以避免合并提交,最终在pull请求中提交基于上游存储库当前 master 的干净提交。
如果您在rebase之前推送,则必须使用-f
执行强制推送,以便在重新定位后再次推送,因为您在rebase期间重写了历史记录。
值得记住的一点:合并(不是快进或重新定义)应该从不出现在简单的修复/功能分支中 - 就像你永远不应该重写#34中的历史记录一样;主"其他人可能以自己的工作为基础的分支。
答案 1 :(得分:2)
我应该/可以在最后一步尝试使用git push --force(PR的一部分在我的github存储库中,但很可能没有其他地方被拉掉)?
是。如果您的本地分支不是远程分支的后代,则需要强制推送分支,而不是在重新分支之后。
您应该了解强制推送给可能已经覆盖了更改的其他开发人员的后果,我不推荐它: 更好地使用简单拉动引入上游变化。