zoukankan      html  css  js  c++  java
  • 玩转git版本控制软件

    一、git的基本介绍

      1、什么是git?

        git是个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。说白了就是个版本控制软件

      2、git的使用方法

        git软件是通过命令来实现管理的,git命令和linux命令类似,可以通过Linux命令方式来管理git

    二、git命令基本介绍

      1、版本上线需要用到的功能

        1、使用pwd和cd命令进入到项目的所在目录(项目根目录)

        2、git init

          

          初始化当前项目目录即将当前文件夹初始化为版本库目录,初始化后,会在当前目录自动创建 .git 隐藏文件夹,该文件是Git中最重要的文件夹,因为Git相关文件以及版本都将保存在该文件夹中,有了它就可以记录多文件版本了,通过Git命令可以将所有版本保存在 .git 文件中,两条命令创建一个版本

        3、git status 

          

          由于之前生成了个.git 隐藏文件夹,可以通过该命令来查看该文件夹的状态,如果项目文件代码被修改就会呈现红色字段,表示那个文件被修改

        4、git add .

          

          添加当前项目目录下所有的文件到版本库,这时查看.git文件夹内文件状态就是绿色可执行状态

        5、 git commit -m  "版本名称"

           

          提交到版本库,并起名版本名称,以便后期回滚    

          注意:执行git commit 命令时,可能会提示进行用户和邮箱的配置,该配置用于记录当前版本由那个用户提交

            git config --local user.name 'xuan'

            git config --local user.email 'you@example.com'

         6、命令总结

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

            

          2、工作区:当前开发程序所在目录称为工作区,即:工作开发程序都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件和文件内容做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看。

          3、版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行【git commit -m '又一个版本名称'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录。

          4、补充命令

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

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

            3、git add 文件名,将指定文件添加到版本库的暂存状态(*代表当前文件夹内的所有文件,.代表当前文件夹)。

            4、git commit -m '提交信息',将暂存区的文件提交到版本库的分支。

            5、git log,查看提交记录,即:历史版本记录

    三、git事物回滚方法

      1、git reset --hard  版本号

        

        通过该命令可以直接回滚到指定的程序版本,但是在此之间的版本信息就会被删除。

      2、git reflog

        

          

        可以通过git reflog来查看被删除了的版本信息,并且可以通过git reset --hard  uuid号的方式来恢复到被删除版本的当前位置

      3、git stash

         

        stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。说白了就是版本1之后的代码ok版本1之前的代码出现bug,就可以将版本1之后的代码先暂存在某个地方,然后恢复到版本1初始状态,修改完bug后再把版本1的程序重新git add . git commit -m 下最后吧版本1暂存的代码恢复回来

      4、git stash pop 

          

        该命令是将程序暂存在某地的代码恢复回来继续开发但是当执行 git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。而冲突区域git会显示处理冲突文件,冲突文件内的冲突代码也会显示出来,改就是了

      5、git回滚命令总结

        

        git stash                  将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态

        git stash pop           将第一个记录从“某个地方”重新拿到工作区(可能有冲突)

        git stash apply         编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)

        git stash list             查看“某个地方”存储的所有记录,因为一个git可能会多次stash     

        git stash clear          清空“某个地方”,可以一次性情况多个stash  

        git stash drop      版本号    删除指定版本号的记录

        git reset  -- soft   版本号  将分支程序代码回滚到缓存区

        git reset  -- mix   版本号   将分支程序代码回滚到修改内容区

        git reset  -- hard   版本号 将分支程序代码直接回滚到初始状态

        git reset head   文件名        将缓存区文件回滚到修改内容区

        git checkout   文件名          将修改内容区文件直接回滚到初始状态

    四、git分支介绍

      1、查看并创建一个分支

        

      2、切换到分支上,开发新的功能

        

      3、将分支版本提交到版本库中

        

      4、切换到master分支,将dev分支内容合并到master分支

        

      5、该分支的应用场景

        

         注释:一般情况master分支代码是应用于线上,而dev分支是应用于线下代码开发,如果线上代码出现bug只需要重新开一个bug分支,修复bug然后提交到版本库即可,并不会影响到众多dev分支。

        注意:git merge 时也可能会出现冲突,解决冲突的方式就是找到冲突文件,手动修改冲突并提交,此处不再敖述,冲突的原因有可能是master分支修复bug后并且线下dev分支开发完程序需要和线上master合并时出错。

        注意:同一级别上创建的分支等级时一样的,也就是说master,bug,dev等分支都是兄弟关系。

       6、分支命令

        git branch 分支名称             创建分支

         git checkout 分支名称          切换分支

         git branch -m 分支名称        创建并切换到指定分支

         git branch                          查看所有分支

         git branch -d 分支名称         删除分支

         git merge 分支名称              将指定分支合并到当前分支

    五、git代码托管软件

      1、GitHub软件

        一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,就相当于云盘,属于第三方软件,所有不够安全,平时放放自己写的代码就可以了千万别吧公司的代码放在上面。

      2、GitLab软件

        和GitHub软件功能一样,但这是公司内部自己搭建的软件,相对安全。

      3、由于GitHub软件GitLab软件的功能一样使用方法也一样,所有现在基于GitHub实现代码托管,需要以下步骤:

        1、注册GitHub

          略

        2、创建仓库,如下图所示:

        

        注释:创建完仓库后会有一个URL路径或者是ssh密钥登陆路径代指该仓库,

        3、远程仓库创建好后设置公司git

          

          注释:该命令作用是为地址起一个别名为s5day,方便后续使用

        4、将公司本地的master分支代码push到仓库中,至此仓库就右一份我们自己的代码了

          

        5、在家中可以将仓库中的代码先clone下来,然后编写代码提交到仓库中

          

          注释:由于在公司提交的数据是master分支所有默认clone下来的就是master分支

       6、第二天到公司需要吧仓库中最新的代码拉下拉并合并到本地,然后继续开发代码,最后上传到仓库

          

       7、第二天晚上在家里将仓库最新代码拉下来,存放在版本库中,然后将版本库拉下拉的代码合并到工作区中

          

          注释:长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行 【git pull master 分支】命令等同于【git fetch master 分支】+ 【git merge master/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

          git rebase master/分支  === git merge master/分支,两者之间的区别是merge执行流程比rebase执行流程读取性能差,最终结果不变

      4、通过GitHub实现程序员合作开发

        1、合作者方式:将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。

          

        2、组织方式:,创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者

      

      5、通过GitHub中的Fork实现为其他程序员仓库中的代码修改bug即贡献代码

        1、在自己仓库中找到想搞的项目,fork一下,然后这个项目就在自己仓库出现了

        

       2、从自己仓库获取代码并进行编辑提交创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意那么在作者的源代码中就推出现小P提交的功能

      

    六、git补充内容

      1、git相关配置文件(一共右三个配置文件)

        系统配置: /private/etc/gitconfig

        用户配置: ~/.gitconfig   全局配置文件

        项目配置:.git/config       局部配置文件只是在局部项目中生效,比如说配置个项目的的路径别名就是在该配置文件下

      2、用户免密钥登陆github

        1、首先在git端生成一对密钥

          创建一对秘钥  ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
          注意:如果使用密钥登陆那么需要在git链接github库的时候使用github的ssh密钥方式链接。

      3、git中忽略不必要的文件状态,意思就是说设置不需要git监听状态的文件

        1、首先在当前项目目录下创建一个.gitignore文件,然后将需要忽略的文件添加到该文件内即可

        2、匹配条件

          以斜杠“/”开头表示目录;   

          以星号“*”通配多个字符;   

          以问号“?”通配单个字符   

          以方括号“[]”包含单个字符的匹配列表;   

          以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

          """a.*,test/[abc].py, [abc],test/*,!test/a.py,.idea/*, *.pyc, *.excel"""

       4、一张图总结git与github

        

          

          

  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/xuanan/p/7551929.html
Copyright © 2011-2022 走看看