Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在开发尚不稳定时将错误修复推到生产中_Git_Github_Development Environment_Production Environment - Fatal编程技术网

Git 在开发尚不稳定时将错误修复推到生产中

Git 在开发尚不稳定时将错误修复推到生产中,git,github,development-environment,production-environment,Git,Github,Development Environment,Production Environment,git新手,并不完全理解所有东西是如何工作的,所以寻找一些详细的说明 我有三个遥控器: origin,在这里进行代码更改,开发人员进行初步测试。一旦这些变化看起来稳定,它们就会被推到 staging,其中多个用户(不仅仅是编写代码的用户)进行进一步的测试。一旦staging被拆散并满意地走到客户面前,我就会推动 生产,应用程序公开,客户可以使用 我的暂存环境中有更改,这些更改尚未准备好进入生产,但有一个紧急修复,需要立即进入生产。如何创建修复并将其推送到生产,而不推送到暂存中的不稳定更改 我

git新手,并不完全理解所有东西是如何工作的,所以寻找一些详细的说明

我有三个遥控器:

  • 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行,我会使用热修复程序分支