Git - 回滚到之前的提交而不会丢失工作

时间:2013-07-08 15:36:41

标签: git merge branch

我之前一直在研究功能并将它们合并到主分支中。现在,我需要将master维护为仅限稳定功能的分支,然后在dev分支上构建新功能。

问题在于我在master上的目标稳定提交之前。

我想设置master来说,5次提交之前,推送该分支,然后将其保持为用于部署到我的生产服务器的稳定分支。

这是我到目前为止所做的: 在最近的提交(在我的稳定提交之前),我创建了一个新的分支“dev” 现在dev将是我不稳定的新功能构建。

现在我与master和dev坐在同一个(不稳定)提交。

我想要的是主人现在坐在我以前的稳定提交(5次提交之前)。

奖金问题 - 如果我想添加dev中的功能(这将是提交之前的x提交),但只有在它们稳定之后才有可能吗? 假设我是开发人员,我已经构建了一个活动源和一个电子邮件系统,我只想包含电子邮件系统。

如何将我的电子邮件系统功能分支合并到主服务器(dev后面的5个提交,哪个电子邮件系统分支基于),而不引入我的所有其他更改(在那些dev提前超过master的5个提交中进行的更改) ?

如果我能澄清任何事情,请告诉我。

3 个答案:

答案 0 :(得分:2)

撤消提交:

git reset HEAD~5 --hard # 5 being number of commits, --hard to not keep around changed files

由于您从master分支,因此提交历史记录仍然存在于dev中。一旦准备好,就合并回主人。

至于你的奖金问题,这通常是通过功能分支完成的。例如,我通常有几个我正在研究的分支:master(这里只有稳定的代码),1.x(这里只发布代码),feature-X,feature-Y等。

每个功能都是沙盒,所以当它准备就绪时,我只是将它合并到master中。如果一个特征Y依赖于X,我将X合并到Y并继续工作。一旦完成,合并为主,测试和推送。

对这种发展方式有一个很好的写作:http://nvie.com/posts/a-successful-git-branching-model/。这篇文章介绍git-flow,这很受欢迎。我并没有完全按照书面形式使用它,但我从中得到了一些建议。

你也可以对主人进行反对,不包括你不想保留的提交。为此,我会使用git rebase -i master(-i是交互式的)。这将让您在合并到master之前查看和操作提交。我建议您在执行此操作之前进行分支以防止破坏分支。

答案 1 :(得分:2)

执行此操作以维护指向当前主控的指针

git branch -m master old_master

然后

git checkout -b master HEAD~5

移动游览大师5提交前(或指定一个sha),然后你可以删除old_master与

git branch -d old_master

对于奖金问题,你可以开发功能分支并将它们与开发分支中的--no-ff合并,然后坐在master上你会做git merge --no-ff devcommit,其中devcommit表示该功能的合并发展中的分支。

您可以在this中看到有关如何执行此操作的示例。

答案 2 :(得分:1)

在您的分店主人身上:

  • git checkout -b dev:您现在有一个dev分支指向与master(unstable)相同的哈希
  • git reset --hard HEAD~5:master现在已提交5次(你的不稳定提交仍在你的分支上)

奖金:

  • 寻找git cherry-pick
  • 在dev的分支机构上构建您的“电子邮件”功能,然后在rebasemaster您的分支机构电子邮件(在电子邮件分支上:git rebase master