我发现自己最近有几次遇到这种情况,我不知道该怎么处理。
所以我有一个git仓库的分支,我把我的master分支和上游的master分支保持同步。
当我想处理新功能、错误修复等时,我从主文件创建一个分支并执行任何工作。完成后,我合并在此期间对上游主文件所做的任何更改,然后从功能/错误修复分支向上游主文件发送拉取请求。
现在,当我等待拉取请求被接受时,我想做一些稍微不同的事情。然而,新特性的工作需要我刚刚发送拉取请求的bug修复/新特性。我需要在它的基础上构建。
我如何分支/合并/处理分支,以这样一种方式,我可以继续工作,同时仍然能够合并/拉取请求,在我的变化,在一个干净的方式,一旦第一个拉取请求被接受到主?
这些都是使用Github的,尽管我想答案一般来说也适用于Git。
2条答案
按热度按时间sauutmhj1#
在上次提交 feature1 的基础上创建一个新分支 feature2。feature1 将不再向前移动,可以合并。
svgewumm2#
考虑到这个工作流程的流行和过程沿着的陷阱,我认为缺乏指导。特别是,OP提到了GitHub,但几乎没有发现当你点击这个工作流程中常见的“使用rebase更新”或“使用合并提交更新”按钮时会发生什么。
为了更加清晰,这里有一种方法应该是说明性的。首先是设置:
现在OP的困境是master还没有包含
feature1
,那么依赖它的feature2
如何工作呢?从当前分支中分支即可:此时,没有什么可以阻止你
push
新的分支。它将 * 只 * 包含commit3
和commit4
。你甚至可以创建一个合并请求来将它合并到master中。然而,默认情况下,GitHub会阻止你启动合并,因为它检测到分支与master“过时”。现在我们假设远程主机是最新的,
feature1
已经被合并,也许还有其他无关紧要的提交被添加,我们只需要更新我们自己的分支,我们可以在当前的feature2
分支中轻松地完成所有这些工作:现在我们的
feature2
分支对GitHub来说是“最新的”,但是我们需要推送它才能知道。但是如果你喜欢的毒药是rebase
类型的,记住你的提交已经在新的基础上被重放了,所以对于远程控制器来说,它们是不同的提交。不要在此时发出git pull
,尽管命令行给出了善意的建议。瞧,你的Pull Request现在已经是master的“最新”请求了,合并可以开始了。另外,我们知道了GitHub按钮背后的魔力(现在不那么神秘了):
git rebase master
,然后发出git push --force-with-lease
。git merge master
,然后发出git push
。