刚接触 git,并不完全理解一切是如何工作的,所以寻找一些详细的说明......
我有三个 Remote :
origin
,代码更改和开发人员进行初步测试。一旦这些变化看起来稳定,它们就会被推向……登台
,多个用户(不仅仅是编写代码的用户)进行进一步测试。一旦staging
被拆散并令人满意地呈现在客户面前,我就会 push ......生产
,应用程序公开,客户可以使用它。
我的登台
环境发生了变化,尚未准备好进入生产
,但有一个紧急修复需要进入生产
> 现在。我该如何创建修复程序并将其推送到生产环境而不将不稳定的更改推送到暂存阶段?
我使用此流程将一些提交推送到了staging
:
获取最新代码:
git checkout master
git fetch origin
git merge origin/master
迁移数据库:
bundle exec rake db:migrate
创建一个新分支:
git checkout -b newbranch
(进行一些更改,本地测试并运行测试套件)
提交更改:
git add .
git commit -m "commit message"
merge 更改:
git checkout master
git merge newbranch
(本地测试以确保 merge 中没有任何困惑)
推送到存储库:
git fetch origin
git merge origin/master
git push origin master
推送到 staging
/dev 环境:
git push staging master
(在开发区域进行进一步测试,以确保一切顺利,可以投入生产。如果在推送之前需要进行进一步的更改,请重新开始。这个循环会持续一段时间,直到一切看起来都很好。目前,我正在这样做阶段,更改正在测试中,尚未准备好投入生产
。)
推送到生产
:
git push production master
假设我创建了一个包含错误修复的新分支...如何更改这些步骤才能将该错误修复投入生产,而不推送目前正在上演的所有不稳定更改?
我已经进行了大量的搜索,到目前为止已经发现有一种方法可以做到这一点,但我对 git 太不稳定,无法找出用于到达那里的命令...谢谢提前。
最佳答案
不要用未经测试的东西污染你的master
分支
您写道,您经常将本地 master
分支推送到登台服务器;如果是这样,则意味着您不能 100% 确定 master
上的内容已准备好用于生产。但是 master
不应该是您最稳定的本地分支吗?或者您有更稳定的(本地)分支吗?
如果您的本地 master
确实是您最稳定的分支,那么您在 master 中 merge 未经测试/实验的内容(例如来自
之前测试您的newbranch
)是错误的源
和临时
服务器上的一切是否正常;你正在用未经证实的东西“污染”你的本地 master
分支!不好。
解决当前问题的建议
至少,您应该切换到不会污染本地 master
分支的工作流程。
这是一个想法。创建一个名为 develop
的新本地分支,指向 master
的当前提示。
git branch develop master
然后,假设 origin/master
位于本地 master
分支之后,将本地 master
分支重置为其最后的稳定状态(当前生产状态):
git checkout master
git reset --hard production/master
现在,创建并 checkout 一个 bugfix
分支,该分支指向与 master
相同的提交:
git checkout -b bugfix
然后
- 对
bugfix
进行一些提交以修复该错误。 将您的
bugfix
分支推送到origin
服务器中的master
分支:git push origin bugfix:master
必要时强制推送。
- 只要您对
源
服务器上的结果不满意,请返回第 1 步。 当您对
origin
服务器上看到的内容感到满意后,请将您的bugfix
分支推送到以下位置的master
分支:您的登台
服务器git push staging bugfix:master
必要时强制推送。
- 只要您对
登台
服务器上的结果不满意,请返回第 1 步。
最后,将 bugfix
merge 到 master
中,删除它,然后将 master
推送到您的生产
远程:
git checkout master
git merge bugfix
git branch -d bugfix
git push production master
现在您已经部署了错误修复程序,是时候更新您的 develop
分支了:
git checkout develop
git merge master
您的 develop
分支现在包含错误修复。您可以继续在其上开发新功能。
改进工作流程的建议
在develop
上进行所有开发。如果您愿意,可以使用中间功能分支,然后将其 merge 到 develop
中。当您准备好测试新东西时,
- 将
develop
推送到origin
服务器中的master
分支;确保一切正常。 - 将
develop
推送到staging
服务器中的master
分支;确保一切正常。 - 将
develop
merge 到master
。 - 将
master
推送到生产
服务器。
关于git - 当开发尚未稳定时将错误修复推送到生产中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146563/