zoukankan      html  css  js  c++  java
  • Git--Bug解决篇

    Git--公司bug解决篇

      作为程序员,我们时常遇到这样的场景,公司的产品上线了,程序员们美滋滋的开始开发新功能希望得到更多的流量。这时候,公司上线的产品发生了很严重的bug,可是我们已经在这个bug的基础上将新功能开发了一半怎么办?

    这时候就要用到Git的bug解决方案。

    方案一:stash

    stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

    acBook-Pro-4:pondo gaoshengyue$ vim app01/views.py             # 开发灭霸功能,刚开发到一半
     
    MacBook-Pro-4:pondo gaoshengyue$ git status    #查看一下状态
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
     
        modified:   app01/views.py
     
    no changes added to commit (use "git add" and/or "git commit -a")
     
    MacBook-Pro-4:pondo gaoshengyue$ git stash                     # 将开发到一半的灭霸功能,临时存储到“某个地方”
    Saved working directory and index state WIP on master: 0972f4b 复仇者联盟上线
    HEAD is now at 0972f4b 复仇者联盟上线
     
    MacBook-Pro-4:pondo gaoshengyue$ git status                    # 工作区回到当前版本未做任何操作前
    On branch master
    nothing to commit, working tree clean
     ###回滚
    MacBook-Pro-4:pondo gaoshengyue$ vim pondo/settings.py         # 紧急修复bug
    MacBook-Pro-4:pondo gaoshengyue$ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
     
        modified:   pondo/settings.py
    no changes added to commit (use "git add" and/or "git commit -a")
     
    MacBook-Pro-4:pondo gaoshengyue$ git add .                     # 添加到修改bug的代码到暂存状态
    MacBook-Pro-4:pondo gaoshengyue$ git commit -m '紧急修复bug'     # 提交修复Bug的代码到分支
    [master 1300d33] 紧急修复bug
     1 file changed, 1 insertion(+)
     
    MacBook-Pro-4:pondo gaoshengyue$ git stash pop                 # 将开发到一半的灭霸功能从“某个地方”再次拿会工作区继续开发
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
     
        modified:   app01/views.py
     
    no changes added to commit (use "git add" and/or "git commit -a")
    Dropped refs/stash@{0} (059d78ca8fa204f9559bd3ce0ae76235969b4301)

    特别的:执行 git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。

    a. 原来内容:
        from django.shortcuts import render,HttpResponse
    
        def index(request):
            return render(request,'index.html')
    
        def africa(request):
            return HttpResponse('复仇者联盟')
    
        
    b. 开发到一半直播功能:
        from django.shortcuts import render,HttpResponse
    
        def index(request):
            return render(request,'index.html')
    
        def africa(request):
            return HttpResponse('复仇者联盟')
    
    
        def live(request):
            print('灭霸开发到一半')
            return HttpResponse('....')
    
    
    c. 执行git stash,回到当前版本未修改状态:
        from django.shortcuts import render,HttpResponse
    
        def index(request):
            return render(request,'index.html')
    
        def africa(request):
            return HttpResponse('复仇者联盟')
    
    d. 修复Bug并提交:
        from django.shortcuts import render,HttpResponse
    
        def index(request):
            return render(request,'index.html')
    
        def africa(request):
            return HttpResponse('复仇者联盟金刚狼')
    
    
    e. 继续开发直播功能 git stash pop,此时会出现冲突:
        MacBook-Pro-4:pondo gaoshengyue$ git stash pop
        Auto-merging app01/views.py
        CONFLICT (content): Merge conflict in app01/views.py
    
        表示app01/views.py存在冲突需要解决,此时文件内容为:
    
        from django.shortcuts import render,HttpResponse
    
            def index(request):
                return render(request,'index.html')
    
            def africa(request):
            <<<<<<< Updated upstream:               # 修复Bug时更改的内容
                return HttpResponse('复仇者联盟金刚狼')  
            =======                                  # 修复Bug前正在开发新功能时的内容
                return HttpResponse('复仇者联盟')
    
            def live(request):
                print('灭霸刚开发到一半')
                return HttpResponse('灭霸')
            >>>>>>> Stashed changes
    
    
        需要自行解决冲突,然后继续开发,如:
    
        from django.shortcuts import render,HttpResponse
    
            def index(request):
                return render(request,'index.html')
    
            def africa(request):
            
                return HttpResponse('复仇者联盟金刚狼')  
            
            def live(request):
                print('灭霸刚开发到一半')
                return HttpResponse('灭霸')

    stash相关常用命令:

    • git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    • git stash list        查看“某个地方”存储的所有记录
    • git stash clear     清空“某个地方”
    • git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    • git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    • git stash drop      编号,删除指定编号的记录

     方案二:branch

    分支学习:branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

    复制代码
    MacBook-Pro-4:pondo gaoshengyue$ git branch dev                 # 创建新分支,即:拷贝一份当前所在分支代码到新分支
    MacBook-Pro-4:pondo gaoshengyue$ git checkout dev               # 切换到dev分支
    MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py             # 开发功能
    MacBook-Pro-4:pondo gaoshengyue$ git status                     # 查看状态,即:在dev分支修改了app01/views.py文件
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   app01/views.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    MacBook-Pro-4:pondo gaoshengyue$ git add .                      # 将修改文件添加到版本库的暂存区
    MacBook-Pro-4:pondo gaoshengyue$ git commit -m '新功能开发完毕'    # 将暂存区的内容提交到当前所在分支,即:dev分支
    [dev 32b40cd] 新功能开发完毕
     1 file changed, 2 insertions(+) 
    MacBook-Pro-4:pondo gaoshengyue$ git checkout master             # 切换回master分支 
    Switched to branch 'master'
    MacBook-Pro-4:pondo gaoshengyue$ git merge dev                   # 将dev分支内容合并到master分支
    Updating 0972f4b..32b40cd
    Fast-forward
     app01/views.py | 2 ++
     1 file changed, 2 insertions(+)
    复制代码

    按照分支的思路,如果我们在公司产品上线遇到bug的时候,就可以这么来做:

    MacBook-Pro-4:pondo gaoshengyue$ git branch                     # 当前在master分支
    * master
     
     
    MacBook-Pro-4:pondo gaoshengyue$ git branch dev                 # 创建dev分支用于开发新功能
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout dev               # 切换到dev分支
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py             # 开发新功能到一半,需要紧急修复Bug
     
    MacBook-Pro-4:pondo gaoshengyue$ git add .
     
    MacBook-Pro-4:pondo gaoshengyue$ git commit -m '新功能开发一半'
    [dev b3ac2cb] 新功能开发一半
     1 file changed, 2 insertions(+)
     
     
     
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo gaoshengyue$ git branch bug                 # 创建bug分支
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout bug               # 切换到bug分支
    Switched to branch 'bug'
     
    MacBook-Pro-4:pondo gaoshengyue$ vim pondo/settings.py          # 修改bug
     
    MacBook-Pro-4:pondo gaoshengyue$ git add .                      # 提交bug
     
    MacBook-Pro-4:pondo gaoshengyue$ git commit -m '紧急修复bug'      # 提交bug
    [bug f42f386] 紧急修复bug
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout master            # 切换会master
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo gaoshengyue$ git merge bug                  # 将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    Updating 0972f4b..f42f386
    Fast-forward
     pondo/settings.py | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
     
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout dev               # 切换到dev分支,继续开发新功能
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo gaoshengyue$ vim app01/views.py             # 继续开发其他一半功能
     
    MacBook-Pro-4:pondo gaoshengyue$ git add .                      # 提交新功能
     
    MacBook-Pro-4:pondo gaoshengyue$ git commit -m '继续开发完成'      # 提交功能
    [dev c0bfb27] 继续开发完成
     1 file changed, 1 insertion(+)
     
    MacBook-Pro-4:pondo gaoshengyue$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo gaoshengyue$ git merge dev                  # 将dev分支合并到master分支
    Merge made by the 'recursive' strategy.
     app01/views.py | 3 +++
     1 file changed, 3 insertions(+)

     注意:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交。

    branch相关常用命令:

    • git branch 分支名称             创建分支
    • git checkout 分支名称          切换分支
    • git branch -m 分支名称        创建并切换到指定分支
    • git branch                          查看所有分支
    • git branch -d 分支名称         删除分支
    • git merge 分支名称              将指定分支合并到当前分支
  • 相关阅读:
    自己用Django搭建的blog和用户权限
    python实现简单爬虫功能
    异步任务队列Celery在Django中的使用
    Django添加全文搜索功能入门篇
    Django 最好的缓存memcached的使用
    Django中添加富文本编辑器
    Python之Django 访问静态文件
    Django中url的逆向解析 -> Reverse resolution of URLs
    python(Django之html模板继承)
    IOS7以后无需自定义,改变UITabbarItem的图片文字颜色
  • 原文地址:https://www.cnblogs.com/gaoshengyue/p/8706502.html
Copyright © 2011-2022 走看看