git - 当开发尚未稳定时将错误修复推送到生产中

标签 git github development-environment production-environment

刚接触 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

然后

  1. bugfix 进行一些提交以修复该错误。
  2. 将您的 bugfix 分支推送到 origin 服务器中的 master 分支:

     git push origin bugfix:master
    

    必要时强制推送。

  3. 只要您对服务器上的结果不满意,请返回第 1 步。
  4. 当您对 origin 服务器上看到的内容感到满意后,请将您的 bugfix 分支推送到以下位置的 master 分支:您的登台服务器

    git push staging bugfix:master
    

    必要时强制推送。

  5. 只要您对登台服务器上的结果不满意,请返回第 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 中。当您准备好测试新东西时,

  1. develop 推送到 origin 服务器中的 master 分支;确保一切正常。
  2. develop 推送到 staging 服务器中的 master 分支;确保一切正常。
  3. develop merge 到master
  4. master推送到生产服务器。

关于git - 当开发尚未稳定时将错误修复推送到生产中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146563/

相关文章:

git - 如何在本地和远程创建一个新分支?地理信息系统

git - 如何下载 GitHub 版本的二进制文件?

python - 使用 PIP 从 Github 安装 Python 包

python - 如何加快Django开发-代码重装

laravel - 共享文件夹的主机路径丢失 : ~/Code

python - 我如何为在 Linux 环境下使用 Python 工作一个夏天做准备?

git - 安装私有(private) Go 模块 : unknown revision error

git - 为什么git fetch origin master失败?

github - 是什么流程导致 Github 提交的一个用户的提交为 "authored",而另一个用户的提交为 "committed"?

git - 连接到 TFS 或 Visual Studio Online 中的 git 存储库