• Git


    1.Git介绍

    Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,所以,工作的时候就不需要联网了,因为版本库都是在自己的电脑 上。现在每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    主要有如下特点:

    1. 版本控制

    2. 分布式

    3. 工作过程是将服务器上的代码下载到本地,本地开发完成后,在提交到服务器端

    git相比于svn功能更加的强大,命令也很多。本篇博客将详细介绍一些常用命令的使用操作。

    2.Git和SVN的对比

    1.git是分布式的,svn是集中式的。(最核心)

    2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)

    3.git可离线完成大部分操作,svn则不能。

    4.git有着更优雅的分支和合并实现。

    5.git有着更强的撤销修改和修改历史版本的能力

    6.git速度更快,效率更高。

    基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。

    3.Git几个概念

    一. 工作目录

    工作目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

    二. 暂存区域(索引)

    是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。

    三. Git 仓库目录

    是Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

    4.Git工作流程

    基本的 Git 工作流程如下:

    在工作目录中修改文件 > 暂存文件,将文件的快照放入暂存区域 > 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

    如果 Git 目录中保存着的特定版本文件,就属于已提交状态。如果作了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

    5.Git的安装

    yum install git -y

    不需要重启操作

    6.git常用选项介绍

    [root@localhost ~]# git

    usage: git [--version] [--help] [-c name=value]

    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]

    [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]

    [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]

    <command> [<args>]

    最常用的 git 命令有:

    add 添加文件内容至暂存区域(索引)

    bisect 通过二分查找定位引入 bug 的变更

    branch 列出、创建或删除分支

    checkout 切换分支以及回滚

    clone 克隆一个版本库到一个新目录

    commit 记录变更到版本库(仓库)

    diff 显示提交之间、提交和工作区之间等的差异

    fetch 从另外一个版本库下载对象和引用

    grep 输出和模式匹配的行

    init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库,初始化工作目录

    log 显示提交日志,历史版本信息

    merge 合并分支

    mv 移动或重命名一个文件、目录或符号链接

    pull 拉取远程代码至本都

    push 推送本地仓库代码至远程仓库

    rebase 本地提交转移至更新后的上游分支中

    reset 回滚版本

    rm 从工作区和索引中删除文件

    show 显示各种类型的对象

    status 查看工作目录下的文本状态

    tag 创建、列出、删除或校验一个GPG签名的 tag 对象

    7.git简单使用演示

    第一步:创建目录

    [root@localhost ~]# mkdir /liang

    [root@localhost ~]# cd /liang

    [root@localhost ~]# ls

    第二步:初始化目录

    [root@localhost liang]# git init

    初始化空的 Git 版本库于 /liang/.git/

    [root@localhost liang]# ls -a

    . .. .git #包含该文件的是git的工作目录,所以以后想在git目录下操作,需要到包含.git的目录下进行

    第三步:创建文本

    [root@localhost liang]# echo '123'>>test

    [root@localhost liang]# cat test

    123

    第四步:添加至暂存区域

    [root@localhost liang]# git add . # .表示提交当前目录下的所有文件

    [root@localhost liang]# git log

    fatal: bad default revision 'HEAD' # 表示仓库为空

    第五步:提交至仓库

    [root@localhost liang]# git commit -m "v1" # v1是名字

    [master(根提交) fa56b78] v1

    Committer: root <root@localhost.localdomain>

    您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确

    与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:

    git config --global user.name "Your Name"

    git config --global user.email you@example.com

    设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

    git commit --amend --reset-author

    1 file changed, 1 insertion(+)

    create mode 100644 test

    [root@localhost liang]# git config --global user.name "Your Name"

    [root@localhost liang]# git config --global user.email you@example.com

    [root@localhost liang]# git log

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1 # 添加仓库成功

    第六步:再次编辑文本

    [root@localhost liang]# cat test

    123

    [root@localhost liang]# echo '456'>>test

    [root@localhost liang]# cat test

    123

    456

    第七步:进行添加至暂存区域

    [root@localhost liang]# git add . # .表示提交当前目录下的所有文件

    第八步:提交至仓库

    [root@localhost liang]# git commit -m "v2"

    [master b0f83dc] v2

    1 file changed, 1 insertion(+)

    第九步:查看历史版本

    [root@localhost liang]# git log

    commit b0f83dc911cae51cebc3f9a9e834bee8c31aa0ed

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 14:47:13 2019 +0800

    v2

    commit fa56b781be49d0f809151946cec11f991f541b41 回滚用这个码

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    第十步:回滚版本至v1版

    [root@localhost liang]# cat test

    123

    456

    [root@localhost liang]# git reset --hard fa56b781be49 # 复制要回滚版本的commit码。最少7位数

    HEAD 现在位于 fa56b78 v1

    [root@localhost liang]# cat test

    123

    8.演示撤销各个阶段的文本

    8.1 撤销工作区的内容

    第一步:编辑已经提交的一个文本

    [root@localhost liang]# cat test

    123

    [root@localhost liang]# echo '123'>>test

    [root@localhost liang]# cat test

    123

    123

    第二步:查看文本状态

    [root@localhost liang]# git status

    # 位于分支 master

    # 尚未暂存以备提交的变更:

    # (使用 "git add <file>..." 更新要提交的内容)

    # (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    #

    #        修改: test

    #

    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

    第三步:撤销工作区内容

    [root@localhost liang]# git checkout -- test # test为要撤销的文件名

    第四步:再次查看文本状态

    [root@localhost liang]# git status

    # 位于分支 master

    无文件要提交,干净的工作区

    [root@localhost liang]# cat test

    123

    8.2撤销暂存区的内容

    第一步:编辑已经提交的一个文本

    [root@localhost liang]# cat test

    123

    [root@localhost liang]#

    [root@localhost liang]# echo '456'>>test

    [root@localhost liang]# cat test

    123

    456

    第二步:提交文件至暂存区

    [root@localhost liang]# git add .

    第三步:查看文本状态

    [root@localhost liang]# git status

    # 位于分支 master

    # 要提交的变更:

    # (使用 "git reset HEAD <file>..." 撤出暂存区)

    #

    #        修改: test

    #

    第四步:撤销暂存区的文件至工作目录

    [root@localhost liang]# git reset HEAD test

    重置后撤出暂存区的变更:

    M        test

    第五步:查看文本状态

    [root@localhost liang]# git status

    # 位于分支 master

    # 尚未暂存以备提交的变更:

    # (使用 "git add <file>..." 更新要提交的内容)

    # (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    #

    #        修改: test

    #

    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

    第六步:撤销工作区的文本

    [root@localhost liang]# git checkout -- test

    [root@localhost liang]# git status

    # 位于分支 master

    无文件要提交,干净的工作区

    [root@localhost liang]# cat test

    123

    9.版本控制

    第一步:编辑文本

    [root@localhost liang]# cat test

    123

    [root@localhost liang]# echo '789' >> test

    第二步:文本添加至暂存区域

    [root@localhost liang]# git add test

    [root@localhost liang]# git status

    # 位于分支 master

    # 要提交的变更:

    # (使用 "git reset HEAD <file>..." 撤出暂存区)

    #

    #        修改: test

    #

    第三步:提交暂存区域文本

    [root@localhost liang]# git commit -m "v3"

    [master e465660] v3

    1 file changed, 1 insertion(+)

    第四步:查看版本信息

    [root@localhost liang]# git log

    commit e46566079f4264873160822b9ad673c308be4b4f

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:24:11 2019 +0800

    v3

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    第五步:版本回滚

    首先需要谁用git log获取到commitID,然后进行回滚

    [root@localhost liang]# git reset --hard fa56b781be4

    HEAD 现在位于 fa56b78 v1

    第六步:查看版本信息

    [root@localhost liang]# git log

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    思考:如何回退到v3版本?

    第一步:使用git reflog获取commit id

    [root@localhost liang]# git reflog

    fa56b78 HEAD@{0}: reset: moving to fa56b781be4

    e465660 HEAD@{1}: commit: v3

    fa56b78 HEAD@{2}: reset: moving to fa56b781be49

    b0f83dc HEAD@{3}: commit: v2

    fa56b78 HEAD@{4}: commit (initial): v1

    第二步:回退版本至v3

    [root@localhost liang]# git reset --hard e465660

    HEAD 现在位于 e465660 v3

    [root@localhost liang]# cat test

    123

    789

    10.git分支介绍

    几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

    Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。

    11.git分支创建和切换

    第一步:查看分支

    [root@localhost liang]# git branch

    * master

    第二步:创建分支

    [root@localhost liang]# git branch a # a是分支名

    [root@localhost liang]# git branch

    a

    * master

    第三步:切换分支

    [root@localhost liang]# git checkout a

    切换到分支 'a'

    [root@localhost liang]# git branch

    * a # *在哪就是在哪个分支上

    master

    12.git分支的使用演示

    第一步:在ken分支上面操作文本

    [root@localhost liang]# git branch

    * a

    master

    [root@localhost liang]# ls

    test

    [root@localhost liang]# cat test

    123

    789

    [root@localhost liang]# echo 'liang'>> test

    [root@localhost liang]# git add

    没有指定文件,也没有文件被添加。

    也许您想要执行 'git add .'?

    [root@localhost liang]# git add .

    [root@localhost liang]# git commit -m "v4"

    [a 706bf14] v4

    1 file changed, 1 insertion(+)

    第二步:在ken分支查看版本信息

    [root@localhost liang]# git log

    commit 706bf14926abb9804a34853c9cd9eb1f791bb28a

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:37:04 2019 +0800

    v4

    commit e46566079f4264873160822b9ad673c308be4b4f

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:24:11 2019 +0800

    v3

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    第三步:切换至主分支

    [root@localhost liang]# git checkout master

    切换到分支 'master'

    [root@localhost liang]# git branch

    a

    * master

    第四步:查看版本信息

    [root@localhost liang]# git log

    commit e46566079f4264873160822b9ad673c308be4b4f

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:24:11 2019 +0800

    v3

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    第五步:查看文本信息

    [root@localhost liang]# cat test

    123

    789

    第六步:合并分支

    [root@localhost liang]# git merge a # a为要合并的分支

    更新 e465660..706bf14

    Fast-forward

    test | 1 +

    1 file changed, 1 insertion(+)

    第七步:再次查看版本信息

    [root@localhost liang]# git log

    commit 706bf14926abb9804a34853c9cd9eb1f791bb28a

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:37:04 2019 +0800

    v4

    commit e46566079f4264873160822b9ad673c308be4b4f

    Author: Your Name <you@example.com>

    Date: Mon Jun 17 15:24:11 2019 +0800

    v3

    commit fa56b781be49d0f809151946cec11f991f541b41

    Author: root <root@localhost.localdomain>

    Date: Mon Jun 17 14:40:15 2019 +0800

    v1

    第八步:查看文本信息

    [root@localhost liang]# cat test

    123

    789

    liang

    总结:

    在分支上面的开发内容,实际并不会影响我们的主分支

    只有在主分支进行合并分支的时候我们才能查看到在子分支上面编辑的内容

    这样就大大减轻了我们主分支开发的一个混乱及错误

  • 相关阅读:
    SpringMVC
    SpringMVC
    SpringMVC
    SpringMVC
    JavaWeb
    SpringMVC
    SpringMVC
    Spring
    Spring
    Spring
  • 原文地址:https://www.cnblogs.com/liangzb310/p/11043320.html
Copyright © 2020-2023  润新知