• Git和Github的基本操作


    什么是GIT?

    Git是一个免费、开源的版本控制软件,目前世界上最先进的分布式版本控制系统(没有之一)

    什么是版本控制系统?

    版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况得系统。

    • 系统具体功能

        记录文件的所有历史变化

        随时可恢复到任何一个历史状态

        多人协作开发或修改

        错误恢复

    版本控制的工具:

      - svn   集中式版本控制系统

      - git  分布式版本控制系统

    集中式vs分布式

    CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢:

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

    中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

    集中式版本控制系统最大的毛病就是必须联网才能工作。

    分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。

    既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

    在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。

    因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

    什么是Github

    Github是全球最大的社交编程及代码托管网站(https://github.com/)。

    Github可以托管各种git库,并提供一个web界面(用户名.github.io/仓库名)

     Github和Git是什么关系

    Git是版本控制软件

    Github是项目代码托管的平台,借助git来管理项目代码

    使用Git

    项目背景:这个创业者想开发选课系统

    阶段一:顺利上线代码

    首先在你创建的项目的文件夹里面右键--->点击Gir Bash Here---->吧git运行起来。

    1、初始化:git   init

    git init,初始化,表示即将对当前文件夹进行版本控制

    git init

    2、如果你第一次使用git的时候,需要配置一下。如果你已经配置了,以后就不用配置了

     3、使用git init之后工作区有一个隐藏目录.git,这个不是工作区,而是git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

    你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

     4、添加当前的目录以及所有的子文件到暂存区
    • git add 文件名,将指定文件添加到版本库的暂存状态。
          git add .    #所有的文件
    
         git add README.md  #具体添加的文件
    

     git status查看当前状态,红色代表未跟踪的文件,绿色代表跟踪的文件(可以被版本库管理)

         查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。

    5. 数据提交上线:git commit -m "描述信息"

    将暂存区的文件提交到版本库的分支。

     

    6、查看状态,看那个是否被修改过:git status

    一定记得先add,后commit,add之后是没有放到版本里的,只有commit的时候才有版本

    7、查看有几个版本:查看版本提交记录   :git log

    查看提交记录,即:历史版本记录

    8.修改某一个文件后,提交

    9.查看提交后log

    10、回滚到上一个版本:git   reset --hard   版本号
     
    11、再跳回去(查看往后的版本号):git reflog 

     Git把管理的文件分为了两个区域四个状态。

    add到暂存状态的时候成绿色了,在commit的时候就没有了

    提供了这个回滚的功能。

    12、撤销修改:git checkout -- <file>(在add之前撤销)

    13、撤销修改:git reset head -- <file>(在add之后撤销)
     

    14、总结:
    • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

    • git log可以查看提交历史,以便确定要回退到哪个版本。

    • git reflog查看命令历史,以便确定要回到未来的哪个版本。

    • git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
    • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
    • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
    • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用git reset --hard commit_id,不过前提是没有推送到远程库。

    阶段二:当开发到一半的时候出现bug,修复bug

      - 开发直播功能

    当项目开发到一半的时候,就是在此时线上运行平台出现Bug需要紧急修复,之前的版本出现bug了怎么办? 

    解决思路:使用分支

     默认会有一个master的分支。只做线上的版本,注意不要在master分支上修改,要修改的话就创建一个bug分支

    1、创建一个修复bug的分支:git  branch  bug   ,这个bug分支是在master分支上建的,相当于拷贝了一份

    2、查看一共有几个分支 :  git  branch

    3、跳转到bug分支:git  checkout  bug

    4、跳转到master分支:git branch master 

    5、创建一个开发新功能的分支:git  branch  dev    #只做开发的版本

    现在就有三个分支了,每个分支都是不一样的,bug修复完了,现在就要合并在master上了。

    6、master和bug分支合并:git merge  bug  

    7、删除bug分支:git branch -d bug

    8、继续开发,切到dev:git  branch  dev

    9、开发完毕,master和dev合并:git merge dev 

    切换之前一定记得把你的代码提交一下

    git add . 

    git commit -m '修改bug' 

    合并的时候可能出现冲突,可能不出现,出现冲突了就得手动解决

    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ git branch bugdev  # 创建分支bugdev
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ ls
    __pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ git checkout bugdev #切换分支bugdev
    Switched to branch 'bugdev'
    M       core/main.py
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
    $ touch b.log  #增加文件
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
    $ git add . #提交到暂存区
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
    $ git commit -m 'bugdev' #提交到版本库,修复bug
    [bugdev 7fc00b8] bugdev
     2 files changed, 1 insertion(+), 2 deletions(-)
     create mode 100644 core/b.log
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
    $ git checkout master #切换到master分支
    Switched to branch 'master'
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ ls
    __pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ git merge bugdev # 合并bugdev分支
    Updating 8562916..7fc00b8
    Fast-forward
     core/b.log   | 0
     core/main.py | 3 +--
     2 files changed, 1 insertion(+), 2 deletions(-)
     create mode 100644 core/b.log
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ ls #查看文件内容,多了b.log文件
    __pycache__/  b.log  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ git branch -d bugdev #删除bugdev分支
    Deleted branch bugdev (was 7fc00b8).
    
    @-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
    $ git branch #查看所有分支
      dev
    * master
    $ git checout dev 继续开发dev内容
    
    开发完内容之后,在master上合并dev内容
    $ git checkout master
    
    $ git merge dev
    

      

    流程图

    branch相关常用命令:
    
    git branch 分支名称             创建分支
    git checkout 分支名称          切换分支
    git branch -m 分支名称        创建并切换到指定分支
    git branch                          查看所有分支
    git branch -d 分支名称         删除分支
    git merge 分支名称              将指定分支合并到当前分支
    

    面试题:当公司代码出现bug时候怎么办?

    解答:创建一个bug分支,修复bug后,合并到主分支上,然后删除bug分支

    扩展:git rebase

    合并+将提交记录合并到一条主线上,提交记录整洁

    阶段三: 两个地方办公

    云端需要一个存放代码的地方用Github或码云等

      公共的

         - Github是用来做代码托管的

         - 码云,做代码托管

         - csdn code ,做代码托管

      内部搭建:

         - gitlab

    1、登录Github

    在家里:

    就会有这样一个地址,我们就可以用这个地址来提交

    git remote add origin https://github.com/XXX/study1.git
    #给远程项目起一个别名origin
     
    git push -u origin master
    #把本地项目分支提交到GitHub远程项目
    

     

    在公司: 

    家里:
                        
                        git add .
                        git commit -m 'xx'
                        
                        git remote add origin https://github.com/WuPeiqi/greenlu.git
                        
                        git push origin master 
                        
    公司:
                        
                        # 新公司第一次获取代码
                            方式一
                            git clone https://github.com/WuPeiqi/greenlu.git
                                
                            方式二
                            git init 
                            git remote add origin https://github.com/WuPeiqi/greenlu.git
                            git pull origin master 直接拿回来
                            
                            
                            方式三
                            git init 
                            git remote add origin https://github.com/WuPeiqi/greenlu.git
                            这的两句相当于git pull origin master 这一句
                            git fetch origin master  拿到分支上了
                            git merge origin/master  合并在一起
                        
                        # 日后
                            git pull origin master  #
                            
                            或者
                            git fetch origin master 
                            git merge origin/master 
                            
                            
                            
                        #   如果你在本地修改问题,又add,又提交,在线上去拿的时候,或许会冲突
    

     图示

    特殊场景解决

    当你在家的时候吧代码上线了。到了公司以后吧线上的代码拉回来。

    git pull origin dev
    开始写代码了。
    写完之后add commit。。。这时候忘了往github上提交了
    回到家的时候,那今天写的代码没提交,怎么办呢?回公司太晚了,在写一遍浪费时间
    ,或许你还记着今天写的代码,就在这基础上又开发了,
    这下提高了警记了,就记得提交了 add 、commit 、git push origin dev
    第二天又到公司了,那昨天的代码怎么办呢、、?是拉下来呢?还是推上去呢?
    如果你推上去的话,没有冲突还好,如果有冲突的话,那你把你的冲突都上线了,不让你提交,所以我们要先拉下来
    先去吧代码拉下来,git pull origin dev 可能会有冲突,解决冲突。

  • 相关阅读:
    如何提高完成端口的性能
    我回来了
    减少资源包中的图片,提高效率
    新的MOVE结构,和在项目中实际的感受
    截图小结
    本周小记
    css选择器
    CSS的三种引入方式
    A标签的四个伪类(L V H A)排序上的讲究
    关于CSS清理浮动的方法
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/9241514.html
Copyright © 2020-2023  润新知