0

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

问题是我领先于我在 master 上的目标稳定提交。

我想设置 master 说,5 次提交前,向上推该分支,然后将其维护为一个稳定的分支以部署到我的生产服务器。

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

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

我想要的是让 master 现在坐在我之前的稳定提交(5 次提交前)。

额外的问题 - 如果我想添加来自 dev 的功能(这将是 x 提交在 master 之前),但只有在它们稳定之后,这可能吗?假设我正在开发,我已经构建了一个活动提要和一个电子邮件系统,我只想包括电子邮件系统。

如何将我的电子邮件系统功能分支合并到 master(dev 后面的 5 个提交,这是电子邮件系统分支所基于的)而不引入我的所有其他更改(在这 5 个提交中 dev 在 master 之前所做的更改)?

让我知道我是否可以澄清任何事情。

4

3 回答 3

2

要撤消提交:

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

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

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

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

关于这种开发风格有一篇很好的文章:http: //nvie.com/posts/a-successful-git-branching-model/。这篇文章介绍了git-flow,很受欢迎。我没有完全按照书面使用它,但我从中得到了一些建议。

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

于 2013-07-08T15:45:10.863 回答
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 表示该功能分支在开发中的合并.

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

于 2013-07-08T15:45:56.797 回答
1

在您的分支主机上:

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

奖金 :

  • 寻找git cherry-pick
  • 在 dev 的分支上构建您的“电子邮件”功能,然后rebasemaster(在电子邮件分支上git rebase master:)上构建您的分支电子邮件
于 2013-07-08T15:44:56.900 回答