我在master
中开发了一个未完成的功能,因此我无法部署到生产中。
所以我做的是从develop
分支创建master
分支,然后在master
上恢复最后一次提交。
现在我的问题是,当我在develop
分支上完成新功能时,我应该如何进行合并?
我问这个是因为在我的情况下,我会继续直接在master
上开发新的小功能,在将develop
合并到develop
之前,我必须将其合并到master
。
但是,如果我将master
合并到develop
中,我也不会合并还原..?
答案 0 :(得分:0)
我建议您阅读本指南https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
听起来你会从理解和坚持特定的git流程中获益更多,而不是我解释如何解决你遇到的这个问题。
我还建议在这里阅读有关变基的内容:https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase
重新引用是一种技术,可以让您在将它们推送到uptrream分支之前移动提交。它可以帮助分配您描述的开始处理分支A中的某个功能的情况,但是希望它在分支B上,其中还有其他更改与第一个分支不匹配。
答案 1 :(得分:0)
嗯,这个问题有一个技术性的答案,并且有关于如何做你想做的事的实用建议。
技术上的答案是,你有这样的情况:
A -- B -- ~B -- C -- D <--(master)
\
E -- F -- G <--(develop)
其中~B
由revert
的{{1}}创建。
如您所述,如果您将B
合并到master
,那么develop
将会~B
撤消develop
的更改。此外,如果您将B
合并到develop
,master
中的更改仍然不会显示在B
中,因为master
已经可以从B
访问}。 (事实上,在这个例子中,它是合并基础。)
情况非常类似于恢复合并时发生的情况,并且恢复选项是相同的:
选项1:您可以“恢复还原” - 在master
合并revert
之前~B
master
develop
{我}在master
合并到develop
之后,或者在master
上,以先到者为准。 (还有其他变化,但这是我通常推荐的那种。)
选项2:您可以执行“强制变基”来创建一个新的提交,“重做”develop
所执行的操作,但这已不在B
的历史记录中。
master
(将git rebase -f <A> develop
替换为您回复的提交之前的ID或解析的某个表达式;例如
<A>
在给定的例子中。您可以使用git rebase -f develop~4 develop
来帮助找到提交,如果它不是一个容易计数的提交数量;但请记住,在此示例中,您需要合并基础的父级,而不是合并基础本身。)
无论如何,这会产生
git merge-base master develop
允许A -- B -- ~B -- C -- D <--(master)
\
B' -- E' -- F' -- G' <--(develop)
和master
按预期方式合并。但是,请注意这会重新编写develop
的历史记录,因此如果您已将develop
推送到其他开发人员可能正在共享的远程位置,那么这可能是不可取的(并且需要在至少;请参阅develiop
文档。
这就是你现在应该做的事情,因为你已经完成了你已经完成的工作。但更实际的建议是:您的需求显然需要更复杂的工作流程。在git rebase
上开发小功能可能会“感觉”更简单,但它不能在技术上为您节省任何重要的功能,并且会导致您遇到类似这样的问题。
有许多工作流程,一些更简单,一些更复杂。找到最能满足您需求的产品是您需要解决的问题。 GitFlow非常好,但可能比你真正需要的还要多。只使用独立的功能分支是介于两者之间的另一种选择。