• Git介绍


    Git介绍
           Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
           Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,所以,工作的时候就不需要联网了,因为版本库都是在自己的电脑 上。现在每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
    主要有如下特点:
    1. 版本控制
    2. 分布式
    3. 工作过程是将服务器上的代码下载到本地,本地开发完成后,在提交到服务器端
     
    Git和SVN的对比
     
    1.git是分布式的,svn是集中式的。(最核心)
    2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)
    3.git可离线完成大部分操作,svn则不能。
    4.git有着更优雅的分支和合并实现。
    5.git有着更强的撤销修改和修改历史版本的能力
    6.git速度更快,效率更高。
    基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。
     
    Git几个概念
     
    一. 工作目录
    工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
    二. 暂存区域
    是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
    三. Git 仓库目录
    是Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
     
    Git工作流程
     
    基本的 Git 工作流程如下:
    在工作目录中修改文件 > 暂存文件,将文件的快照放入暂存区域 > 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
     
    如果 Git 目录中保存着的特定版本文件,就属于已提交状态。如果作了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
     
    Git的安装
     
    第一种安装方式:yum进行安装
    [root@ken ~]# yum install git -y
     
    第二种安装方式:编译安装
    第一步:上传安装包并解压
    [root@ken ~]# rz
    [root@ken ~]# ls | grep git
    git-v2.7.4.zip
    [root@ken ~]# unzip git-v2.7.4.zip
     
    第二步:安装依赖
    [root@ken git-2.7.4]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
     
    第三步:进入解压下目录下并执行编译
     
    [root@ken git-2.7.4]# make prefix=/usr/local/git all
    [root@ken git-2.7.4]# make prefix=/usr/local/git install
     
    第四步:导入二进制程序
    [root@ken git-2.7.4]# rm -rf /usr/bin/git
    [root@ken git-2.7.4]# ln -s /usr/local/git/bin/git /usr/bin/git
    [root@ken git-2.7.4]# git --version
    git version 2.7.4
     
    git常用选项介绍
     
    git add: 添加文件至暂存区域
    git branch: 查看分支和创建分支
    git checkout: 进行撤销也可以进行分支切换
    git clone: 克隆远程主机仓库
    git commit: 把暂存区域的文件提交至仓库中
    git init: 初始化目录(工作目录)
    git merge: 合并分支
    git pull: 拉取远程主机的仓库
    git push: 把本地仓库推送到远程主机
    git reset: 撤销操作
    git status: 查看git目录中文件状态
     
    演示1:简单基础演示
     
    第一步:创建一个目录,并进入
    [root@ken ~]# mkdir /kenken
    [root@ken ~]# cd /kenken
     
    第二步:初始化目录
    [root@ken kenken]# git init
     
    第三步:创建一个测试文件
    [root@ken kenken]# echo  "this is ken">>a.tt
     
    第四步:提交
    [root@ken kenken]# git add a.tt
    [root@ken kenken]# git commit -m "v1"
     
    第五步:查看
    [root@ken kenken]# git log
    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    第六步:往测试文件里面追加数据
    [root@ken kenken]# echo "new data" >>a.tt
     
    第七步:提交
    [root@ken kenken]# git add a.tt
    [root@ken kenken]# git commit -m "v2"
     
    第八步:再次查看
    [root@ken kenken]# git log
    commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:34:11 2018 +0800

        v2

    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    第九步:恢复到第v1版本
    [root@ken kenken]# git reset --hard HEAD (v1的commit)
    HEAD is now at 15370fe v1
    [root@ken kenken]# git log
    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    第十步:恢复到v2版本
    [root@ken kenken]# git reflog               #首先使用git reflog可以查看commit值
    15370fe HEAD@{0}: reset: moving to HEAD~1
    d1f5214 HEAD@{1}: commit: v2
    15370fe HEAD@{2}: reset: moving to HEAD~1
    22d39cb HEAD@{3}: commit: v2
    15370fe HEAD@{4}: commit (initial): v1
    [root@ken kenken]# git reset --hard d1f5214    #恢复的时候指定conmit值
    HEAD is now at d1f5214 v2
    [root@ken kenken]# git log                    #查看发现已经恢复到v2版本
    commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:34:11 2018 +0800

        v2

    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    演示2:撤销工作区的内容
    第一步:创建一个文件
    [root@ken kenken]# echo "test1">>e.tt
    [root@ken kenken]# echo "test2">>e.tt
     
    第二步:把这个文件添加到缓存区
    [root@ken kenken]# git add e.tt
     
    第三步:在文件追加内容
    在包含.git的目录中,只要当前目录下的文件有修改都会自动进入工作区(该文件必须被commit过,否则无法追踪)
    所以下面当往文件e.tt中添加test3的时候。e.tt这个文件就进入到了工作区了
     
    1.文件进入工作区:包含.git隐藏文件的目录中,文件修改就会自动进入
    2.文件进入缓存区:git add .
    3.文件进入仓库:git commit -m ‘v1’
    [root@ken kenken]# echo "test3">>e.tt
     
    第四步:查看工作区
    [root@ken kenken]# git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   e.tt
    #
    # 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:   e.tt
    #
     
    第五步:撤销工作区的内容
    使用命令git checkout — filename即可进行回滚
    [root@ken kenken]# git checkout -- e.tt   #数据回滚
    [root@ken kenken]# git status             #查看状态
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   e.tt
    #
    [root@ken kenken]# cat e.tt                #查看文件内容,发现test3内容已经没有了
    test1
    test2
     
    演示3:撤销缓存区的内容
    第一步:创建文件并进行提交
    [root@ken kenken]# echo "1111">k.tt
    [root@ken kenken]# git add k.tt
    [root@ken kenken]# git commit -m "k.tt"
    [root@ken kenken]# git log
    commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:42:30 2018 +0800

        k.tt
     
    第二步:修改文件并加入到缓存区中
    第一步一定要提交,才能看到效果
    [root@ken kenken]# echo "222">>k.tt
    [root@ken kenken]# echo "333">>k.tt
    [root@ken kenken]# git add k.tt
    [root@ken kenken]# git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    modified:   k.tt
    #
     
    第三步:缓存区进行回退
    [root@ken kenken]# git reset HEAD k.tt
    Unstaged changes after reset:
    M    k.tt
     
    第四步:缓存区进行回退
    [root@ken kenken]# 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:   k.tt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
     
    第五步:工作区进行回滚
    其实现在就已经回到了演示2中了
    回退完成之后可以发现之前写的222和333 已经没有了
    [root@ken kenken]# git checkout -- k.tt
    [root@ken kenken]# git status
    # On branch master
    nothing to commit, working directory clean
    [root@ken kenken]# cat k.tt
    1111
     
    演示4:撤销仓库中的内容
    第一步:查看历史版本
    我们现在处于k.tt中,现在希望回到v3中
     
    [root@ken kenken]# git log
    commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:42:30 2018 +0800

        k.tt

    commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:40:07 2018 +0800

        v4

    commit 1334466fd86ba0ba4ec95147809d71cb21345e95
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:28:11 2018 +0800

        v3

    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    第二步:查看所需要回滚的版本的commit值
    通过上面我们可以看到v3的commit值为1334466fd86ba0ba4ec95147809d71cb21345e95
     
    第三步:执行回滚操作
    commit值没有必要全部写出来,只要写一部分就可以了
    [root@ken kenken]# git reset --hard 1334466f
     
    第四步:查看版本状态
    现在我们处于v3版本之中
    [root@ken kenken]# git log
    commit 1334466fd86ba0ba4ec95147809d71cb21345e95
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:28:11 2018 +0800

        v3

    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    第五步:回退到v4版本中
    我们知道回退版本需要用到commit值
    但是现在通过git log已经看不到v4的commit值了,现在怎么办呐?
    可以通过git reflog查看所有的历史操作
    找到v4前面的值即可
    [root@ken kenken]# git reflog
    1334466 HEAD@{0}: reset: moving to 1334466f
    c5f4690 HEAD@{1}: commit: k.tt
    ec9c03a HEAD@{2}: commit: v4
    1334466 HEAD@{3}: commit: v3
    15370fe HEAD@{4}: reset: moving to HEAD~1
    d1f5214 HEAD@{5}: reset: moving to d1f5214
    15370fe HEAD@{6}: reset: moving to HEAD~1
    d1f5214 HEAD@{7}: commit: v2
    15370fe HEAD@{8}: reset: moving to HEAD~1
    22d39cb HEAD@{9}: commit: v2
    15370fe HEAD@{10}: commit (initial): v1
     
    第六步:回滚到v4版本
    [root@ken kenken]# git reset --hard ec9c03a
    HEAD is now at ec9c03a v4
    [root@ken kenken]# git log
    commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:40:07 2018 +0800

        v4

    commit 1334466fd86ba0ba4ec95147809d71cb21345e95
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 12:28:11 2018 +0800

        v3

    commit 15370fed2791ba4c978018f840caed22fd38221f
    Author: ken <1614833@qq.com>
    Date:   Tue Nov 20 10:17:18 2018 +0800

        v1
     
    Git分支介绍
    几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
    Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。
     
    Git分支使用演示 
    准备:
    第一步:准备git目录
    [root@ken ~]# mkdir /test
    [root@ken ~]# cd /test
     
    第二步:初始化git目录
    [root@ken test]# git init
     
    第三步:查看git分支
    发现显示为空
    [root@ken test]# git branch
    [root@ken test]#
     
    第四步:创建文件并提交才能看到主分支
    [root@ken test]# git branch
    [root@ken test]# touch test
    [root@ken test]# git add .
    [root@ken test]# git branch
    [root@ken test]# git commit -m “v1”
    [master (root-commit) 18a1f53] v1
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test
    [root@ken test]# git branch
    * master
     
    第一步:查看分支
    *表示当前所处的分支位置
    [root@ken kenken]# git branch
    * master
     
    第二步:创建分支
    [root@ken kenken]# git branch ken
    [root@ken kenken]# git branch
      ken
    * master
     
    第三步:切换分支
    [root@ken kenken]# git checkout ken
    Switched to branch 'ken'
    [root@ken kenken]# git branch
    * ken
      master
     
    第四步:在分支里面操作e.tt
    [root@ken kenken]# ls
    a.tt  c.tt  d.tt  e.tt
    [root@ken kenken]# echo "888888">>e.tt
    [root@ken kenken]# cat e.tt
    test1
    test2
    test3
    test4
    test5
    888888
     
    第五步:提交
    git add .表示提交全部
    [root@ken kenken]# git add .
    [root@ken kenken]# git commit -m "test for branch"
    [ken b621584] test for branch
    1 file changed, 1 insertion(+)
     
    第六步:切换回主分支并查看文件
    现在查看e.tt并没有看到刚才子分支提交的内容
    [root@ken kenken]# git checkout master
    Switched to branch 'master'
    [root@ken kenken]# git branch
      ken
    * master
    [root@ken kenken]# cat e.tt
    test1
    test2
    test3
    test4
    test5
     
    第七步:合并子分支
    合并之后发现现在主分支也可以看到刚才子分支添加的内容了
    [root@ken kenken]# git merge ken
    Updating ec9c03a..b621584
    Fast-forward
    e.tt | 1 +
    1 file changed, 1 insertion(+)
    [root@ken kenken]# cat e.tt
    test1
    test2
    test3
    test4
    test5
    888888

  • 相关阅读:
    IP地址和进制转换
    Cisco交换机常见配置
    macOS上的autoreconf错误导致无法安装问题
    LG P5147 随机数生成器
    LG P1879 [USACO06NOV]Corn Fields G
    LG P5017 [NOIP2018]摆渡车
    mysql触发器trigger详解
    MybatisPuls中QueryWrapper的select、update的用法
    @Transactional各属性详解
    Linux如何查看进程、杀死进程、启动进程等常用命令(包括常用的命令,如查看文件,修改文件读写权限、寻找文件等)
  • 原文地址:https://www.cnblogs.com/hao6/p/12863691.html
Copyright © 2020-2023  润新知