Git 在开发尚不稳定时将错误修复推到生产中
git新手,并不完全理解所有东西是如何工作的,所以寻找一些详细的说明 我有三个遥控器:Git 在开发尚不稳定时将错误修复推到生产中,git,github,development-environment,production-environment,Git,Github,Development Environment,Production Environment,git新手,并不完全理解所有东西是如何工作的,所以寻找一些详细的说明 我有三个遥控器: origin,在这里进行代码更改,开发人员进行初步测试。一旦这些变化看起来稳定,它们就会被推到 staging,其中多个用户(不仅仅是编写代码的用户)进行进一步的测试。一旦staging被拆散并满意地走到客户面前,我就会推动 生产,应用程序公开,客户可以使用 我的暂存环境中有更改,这些更改尚未准备好进入生产,但有一个紧急修复,需要立即进入生产。如何创建修复并将其推送到生产,而不推送到暂存中的不稳定更改 我
,在这里进行代码更改,开发人员进行初步测试。一旦这些变化看起来稳定,它们就会被推到origin
,其中多个用户(不仅仅是编写代码的用户)进行进一步的测试。一旦staging
被拆散并满意地走到客户面前,我就会推动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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
迁移数据库:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
创建新分支:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
(进行一些更改,在本地测试并运行测试套件)
提交更改:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
合并更改:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
(本地测试以确保合并过程中没有任何问题)
推送到存储库:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
推送到登台
/dev环境:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
(在开发区进行进一步的测试,以确保一切都可以投入生产。如果在推动之前需要进行进一步的更改,请重新开始。此循环将持续一段时间,直到一切看起来都很好。目前,我正处于此阶段,正在测试更改,但尚未准备好投入生产。)
推送至生产
:
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"
git checkout master
git merge newbranch
git fetch origin
git merge origin/master
git push origin master
git push staging master
git push production master
那么,假设我创建了一个带有bug修复的新分支……这些步骤将如何改变以使bug修复进入生产环境,而不推动目前正在进行的所有不稳定的更改
我已经做了大量的搜索,到目前为止,我已经找到了一种方法来实现它,但是我对git太不稳定了,无法找到到达目的地的命令…提前谢谢 不要用未经测试的东西污染你的master
分支
您写道,您经常将本地主机分支推送到暂存服务器;如果是这样,这意味着您不能100%确定master
上的内容是否已准备好进行生产。但是master
不应该是您最稳定的本地分支吗?或者你们有更稳定的(本地)分支机构吗
如果您的本地master
确实是您最稳定的分支,那么在测试您的origin
和staging
服务器是否一切正常之前,您将未经测试/实验的东西(例如来自newbranch
)合并到master
中是错误的;你正在用未经证实的东西“污染”你当地的master
分支机构!不太好
解决眼前问题的建议
至少,您应该切换到不会污染本地master
分支的工作流
这里有一个想法。创建一个名为develope
的新本地分支,指向master
的当前提示
git branch develop master
然后,假设origin/master
位于本地master
分支之后,将本地master
分支重置为其最后一个稳定状态(当前生产状态):
现在,创建并签出一个bugfix
分支,该分支指向与master
相同的提交:
git checkout -b bugfix
然后
在bugfix
上进行一些提交以修复该bug
将您的错误修复
分支推送到原始
服务器中的主
分支:
git push origin bugfix:master
如果必须的话,用力推
只要您对origin
服务器上的结果不满意,请返回步骤1
一旦您对origin
服务器上看到的内容感到满意,请将bugfix
分支推到staging
服务器中的master
分支
git push staging bugfix:master
如果必须的话,用力推
只要您对staging
服务器上的结果不满意,请返回步骤1
最后,将bugfix
合并到master
,将其删除,然后将master
推送到生产
远程:
git checkout master
git merge bugfix
git branch -d bugfix
git push production master
现在您已经部署了错误修复程序,现在是时候更新您的开发
分支了:
git checkout develop
git merge master
您的develope
分支现在包含错误修复。您可以继续在其上开发新功能
改进工作流程的建议
在develope
上进行所有开发。如果需要,请使用中间要素分支,然后将其合并到development
。当你准备好测试新东西时
将develope
推送到origin
服务器中的master
分支;确保那里一切正常
将develope
推送到staging
服务器中的master
分支;确保那里一切正常
将development
合并到master
将master
推送到production
服务器
您有两个基本选项:
从当前生产版本创建一个热修复分支,并在热修复补丁中创建、挑选或合并后将其与该分支合并。例如,假设master是您的生产分支:
git checkout -b hotfix/name-of-bug master
# code, hack, edit
git commit -am 'Apply hotfix for bug X.'
# Make sure the merge resolves as a fast-forward by rebasing.
# Skip this if you don't care about enforcing linear history.
git rebase master
git checkout master
git merge hotfix/name-of-bug master
git push
Cherry pick向您的主分支机构提交特定的承诺。例如,如果要从存储库中的任何位置拉入commit 7c199758:
git checkout master
git cherry-pick 7c199758
git push
如果您有多个提交或实际的deve行,我会使用热修复程序分支