我之前一直在研究功能并将它们合并到主分支中。现在,我需要将master维护为仅限稳定功能的分支,然后在dev分支上构建新功能。
问题在于我在master上的目标稳定提交之前。
我想设置master来说,5次提交之前,推送该分支,然后将其保持为用于部署到我的生产服务器的稳定分支。
这是我到目前为止所做的: 在最近的提交(在我的稳定提交之前),我创建了一个新的分支“dev” 现在dev将是我不稳定的新功能构建。
现在我与master和dev坐在同一个(不稳定)提交。
我想要的是主人现在坐在我以前的稳定提交(5次提交之前)。
奖金问题 - 如果我想添加dev中的功能(这将是提交之前的x提交),但只有在它们稳定之后才有可能吗? 假设我是开发人员,我已经构建了一个活动源和一个电子邮件系统,我只想包含电子邮件系统。
如何将我的电子邮件系统功能分支合并到主服务器(dev后面的5个提交,哪个电子邮件系统分支基于),而不引入我的所有其他更改(在那些dev提前超过master的5个提交中进行的更改) ?
如果我能澄清任何事情,请告诉我。
答案 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
rebase
上master
您的分支机构电子邮件(在电子邮件分支上:git rebase master
)