Git还原了master的提交但继续开发

时间:2018-01-12 17:14:49

标签: git branch revert

我在master中开发了一个未完成的功能,因此我无法部署到生产中。

所以我做的是从develop分支创建master分支,然后在master上恢复最后一次提交。

现在我的问题是,当我在develop分支上完成新功能时,我应该如何进行合并?

我问这个是因为在我的情况下,我会继续直接在master上开发新的小功能,在将develop合并到develop之前,我必须将其合并到master

但是,如果我将master合并到develop中,我也不会合并还原..?

2 个答案:

答案 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)

其中~Brevert的{​​{1}}创建。

如您所述,如果您将B合并到master,那么develop将会~B撤消develop的更改。此外,如果您将B合并到developmaster中的更改仍然不会显示在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非常好,但可能比你真正需要的还要多。只使用独立的功能分支是介于两者之间的另一种选择。