GIT版本控制器

git介绍

为什么需要版本控制器?
    多个文件,保留所有的版本,需要为每个版本保存一个文件
    协同操作,多个人系统操作时,需要将文件打包发来发去
    容易丢失,被删除意味永远失去

版本控制器的分类:
    VSS:上古时代的一个工具,微软开发,现在基本没啥人使用,忽略
    SVN:十年前,非常火的软件
        特点:集中式版本控制器
        缺点:一旦服务器毁灭,代码就消失
    GIT:
        特点:分布式版本控制器
        优点:相对于SVN,不用担心服务器挂掉
    SVN和GIT相同点:
        服务器(存储代码)
        客户端(用来管理代码)

git基本使用

安装:https://gitforwindows.org/
打开Git Bash
以testgit为例:
a.初始化管理代码
    cd到指定的项目目录下
    git init :对当前目录进行初始化 会多出来一个隐藏文件夹 .git 
    git add <文件>/git add . :将当前目录下的文件添加到暂存区
    git status : 查看当前目录下所有文件的状态
    git commit -m '辅助信息'  :提交代码到版本库
    例如:git commit -m '提交第一版代码'
    每次操作完成以后 验证:
    $ git status
    On branch master
    nothing to commit, working tree clean

    
    如果出现Please tell me who you are.
    在 init 之后输入下列命令:
        git config --global user.name "henry"
        git config --global user.email "henry@163.com" 

b.开发一个新的功能,发短信的功能
    git add <文件>/git add . 
    git status
    git commit -m "注释"

git回滚代码

#短信功能太烧钱,想退回到上一个版本
    git reset --soft commit_id (回滚到版本库暂存区)
    git reset --mix commit_id  (回滚到工作区修改过的内容)
    git reset --hard commit_id (回滚到工作区原内容)
    

    回滚上一个版本
        #拿到版本的id
           git reflog :查看日志文件,存在commit_id
        '''
        3b028e4 (HEAD -> master) HEAD@{3}: commit: 短信功能
        c8484c4 HEAD@{4}: commit (initial): 提交第一版本代码
        '''
        #将代码从本地版本库拉回工作区
        git reset --hard '上个版本的id'
        #git reset --hard c8484c4
        
       返回最新的版本
        #拿到最新版本的id
        git reflog
        '''
        3b028e4 HEAD@{2}: commit: 短信功能
        c8484c4 (HEAD -> master) HEAD@{3}: commit (initial): 提交第一版本代码
        '''
        
        #回滚到最新版本
        git reset --hard '最新版本id'
        #git reset --hard 3b028e4

git stash和分支

#现在开发了一个功能(直播功能),开发到一半,线上出现bug
    方法一:stash
           出现bug和修改的文件不是一个文件
            git stash : 将之前刚刚修改的那一部分代码保存到某个地方
            修改bug完毕
            git add .
            git commit -m '注释'

            git stash pop :将之前保存的修改部分,再次拉回

            git add .
            git commit -m '注释'
       
        出现bug文件和修改的文件是同一个文件(比如都在readme)
            git stash : 将之前刚刚修改的那一部分代码保存到某个地方
            修改bug完毕
            git add .
            git commit -m '注释'

            git stash pop :将之前保存的修改部分,再次拉回
                
            git stash pop :将之前保存的修改部分,再次拉回
            
            vim readme
            出现冲突:
                <<<<<<< Updated upstream
                myage = 123
                =======
                age  = 18
                height = 180
                >>>>>>> Stashed changes
               
            手动解决:                            
                age  = 18
                height = 180
                                        
                git add .
                git commit -m '注释'
     

    方法二:
        推荐使用 分支
        master:上线代码的时候,使用的是主分支代码,需要保证没有任何bug
        dev :开发的时候,使用的分支
        git branch :列出当前所有的分支
        git branch <分支名>(dev/bug) :就会创建出一个新的分支
        git checkout 分支名(dev) :将master上的代码拷贝一份给dev分支开发
        注意:
            以后开发代码的时候,不能在master上开发,需要自己开一个分支开发
        
           在dev上开始开发代码
            vim gongneng1.txt
            git add .
            git commit -m "注释"
         
        此时出现一个bug,需要修复bug:
            #切换到master分支
            git checkout master 
            git branch bug  : 产生一个新的bug分支
            git checkout bug
            修复bug:
                vim msg.txt
                git add .
                git commit -m '注释'
            合并bug代码:
                git checkout master
                git merge bug:
                    没有冲突: 过
                    有冲突: 
                        手动解决冲突
                        解决完毕后: 
                        git add .
                        git commit -m  '注释'
               bug修复完毕后,又开始到dev分支上进行开发
                git checkout dev
            功能开发完毕,不要贸然的合并代码,问一下领导,接下来怎么做?
            
            合并dev上的代码到master上:(权限属于领导)
                git checkout master
                git merge dev
                    出现如下界面,说明没有任何冲突出现:
                        Merge branch 'dev'
                        # Please enter a commit message to explain why this merge is necessary,
                        # especially if it merges an updated upstream into a topic branch.
                        #
                        # Lines starting with '#' will be ignored, and an empty message aborts
                        # the commit.
                        
                    如果有冲突出现,手动解决冲突
               
            起分支名:
                git branch 0603fixbug
            
            解决完bug分支,bug分支还有没有必要存在?
                不删,以后查看的时候方便查看问题
                删除,bug 分支的使命已经完成,应该删掉(git branch -d bug)

服务端(储存代码的地方)

公用(自己用)
    国外:https://github.com/
    国内:https://gitee.com/
私用:
    gitlab(公司自己用)
    
码云为例:
    创建一个公有仓库
    
    方法一:用https进行提交
    https://gitee.com/lizeqian828/python.git
    每次都要往仓库地址进行提交,所以我们需要给其命名一个别名
    git remote add 远程仓库名 远程仓库地址
    git remote add origin https://gitee.com/lizeqian828/python.git
       删除远程仓库别名:git remote remove origin
    
    方法二:用ssh进行提交
    git@gitee.com:lizeqian828/python.git
    git remote add origin git@gitee.com:lizeqian828/python.git
    
    使用ssh进行提交需要在网站上配置公钥
    寻找公钥私钥:
        ssh-keygen -t rsa -C "250735877@qq.com" 一直回车,可以找到.ssh的位置,
        内有id_rsa和id_rsa.pub两个文件, id_rsa是私钥,id_rsa.pub是公钥
        将公钥配置到网站上,设置-安全设置
        
     
    在master分支上提交:
        git push origin master
    在dev分支上开发提交:
        git checkout dev
        
        开发新功能:
            开发完毕
            git add .
            git commit -m "注释"
        
        git push origin dev
        
        
      将代码拷贝到自己的电脑上,可以在家进行开发
        ssh需要进行公钥私钥验证
        git clone 代码的地址  #进入指定文件夹,将库中的代码克隆到自己电脑的指定文件夹下
        git clone git@gitee.com:lizeqian828/python.git
        git clone https://gitee.com/lizeqian828/python.git
        
        cd 仓库名
        进入master主分支
        git branch dev origin/dev #将线上的dev也导下来
        git checkout dev
        开发新功能
            开发完毕
            git add .
            git commit -m '注释'
        git push origin dev
   
    到公司:
        因为在家里对dev进行了修改,所以我们需要在公司的电脑上进行更新
        git pull origin dev : 将线上最新的代码拉到本地, 保证本地的代码是最新的       
    #注意
    如果在公司代码操作完毕,没有进行push,然后在家进行了更新提交
    再次回到公司我们需要先更新git pull ,确保本地的代码版本是最新的,然后在提交未提交的代码
    所有的提交代码,也就是push操作的时候, 如果你没有git pull, 保证本地的代码版本是最新的话, 会报错:
    ! [rejected]        dev -> dev (fetch first)
    error: failed to push some refs to 'git@gitee.com:lupython/s5git.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    因此, 我们需要每次push之前, pull一下, 确保代码是最新的
协同开发:
多人开发同一个项目                
在你入职的时候, 领导会给你开一个gitlab的账号, 然后将你拉入你要开发的那个项目中

码云中操作:进入仓库 -> 管理 ->仓库成员管理 ->添加仓库成员

接下来, 在你的电脑上, 配置公钥私钥免密登录, 
                        
常见的问题:
    自己的代码自己管, 千万不要手贱, 动别人的代码  (********************)                    
    遇到配置文件, config.py, 将配置选项汇总给领导, 让领导改 config.
忽略提交某一类文件:
    需要在当前目录下编辑一个文件 .gitignore
    比如需要忽略.pyc文件
    vim .gitignore
    输入 忽略的文件信息: *.pyc
    网上会提供一个文件,里面包含了所有可忽略的文件

 

posted @ 2019-06-04 11:17  Zhuang_Z  阅读(95)  评论(0)    收藏  举报