Git的基础概念及使用

Git的基础概念css

  1. 什么是Git
    Git 是一个开源的分布式版本控制系统,是目前世界上最早进最流行的版本控制系统。能够快速高效地处理从很小到很是大的项目版本管理。
    特色:项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能高可用性
  2. Git的特性
    Git之因此快速和高效,主要依赖于它的以下两个特性:html

    ① 直接记录快照,而非差别比较
    
    ② 近乎全部操做都是本地执行
  3. SVN 的差别比较
    传统的版本控制系统(例如 SVN)是基于差别的版本控制,它们存储的是一组基本文件每一个文件随时间逐步累积的差别
    SVN的好处 节省磁盘空间
    SVN缺点 耗时、效率低在每次切换版本的时候,都须要在基本文件的基础上,应用每一个差别,从而生成目标版本对应的文件
  4. Git 的记录快照
    Git 快照是在原有文件版本的基础上从新生成一份新的文件,相似于备份。为了效率,若是文件没有修改,Git再也不从新存储该文件,而是只保留一个连接指向以前存储的文件。
    Git快照缺点 占用磁盘空间较大
    Git快照优势 版本切换时很是快,由于每一个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照便可。
    特色 空间换时间,近乎全部的操做都只需访问本地文件和资源通常不须要来自网上 其余计算机的信息
    特性git

    • 断网后依旧能够在本地对项目进行版本管理
    • 联网后,把本地修改的记录同步到云端服务器便可
  5. Git 中的三个区域
    使用 Git 管理的项目,拥有三个区域,分别是工做区暂存区Git 仓库
  6. Git 中的三种状态正则表达式

    • 已修改 modified
      表示修改了文件,但还没将修改的结果放到暂存区
    • 已暂存 staged
      表示对已修改文件的当前版本作了标记,使之包含在下次提交的列表中
    • 已提交 committed
      表示文件已经安全地保存在本地的 Git 仓库中
      注意:shell

      • 工做区的文件被修改了,但尚未放到暂存区,就是已修改状态。
      • 若是文件已修改并放入暂存区,就属于已暂存状态。
      • 若是 Git 仓库中保存着特定版本的文件,就属于已提交状态。
  7. 基本的 Git 工做流程以下缓存

    ① 在工做区中修改文件
    
       ② 将你想要下次提交的更改进行暂存
    
       ③ 提交更新,找到暂存区的文件,将快照永久性存储到 Git 仓库
  8. Git基础
    安装并配置 Git 点击下载相关的Git版本
  9. 配置用户信息
    安装完 Git 以后,要作的第一件事就是设置本身的用户名邮件地址。由于经过 Git 对项目进行版本管理的时候,Git 须要使用这些基本信息,来记录是谁对项目进行了操做:安全

    git config --global user.name "yourname"
    git config --global user.email "yourname@qq.com"

    注意 若是使用了 --global 选项,那么该命令只须要运行一次,便可永久生效。服务器

  10. 检查配置信息
    按如此终端命令,快速的查看 Git 的全局配置信息:分布式

    # 查看全部的全局配置项
    git config --list --global
    # 查看指定的全局配置项
    git config user.name
    git config user.email
  11. 获取帮助信息性能

    # 想要获取 git config 命令的快速参考
    git config -h
  12. 获取 Git 仓库的两种方式
    ① 将还没有进行版本控制的本地目录转换Git 仓库
    ​ ② 从其它服务器克隆一个已存在的 Git 仓库
    以上两种方式都可以在本身的电脑上获得一个可用的 Git 仓库
  13. 在现有目录中初始化仓库
    1. 在项目文件所在目录下打开终端
    2. 执行 git init 命令初始化文件 (会生成.git隐藏文件夹 本机是看不到的)
    3. 工做区中的文件的4种状态 ,这四种状态共分为两大类(被Git管理和未跟踪两种)

    1.初始的文件是未跟踪状态 使用 git status 能够查看到文件出如今 `Untracked files`(未跟踪的文件) 下面
    2.以精简的方式显示文件状态
    ` git status -s //未跟踪状态 精简的方式是以两个红色?开头
      git status // 文件的颜色是 红色的
    `
    3.须要被Git托管的话 使用命令 `git add '图书管理.html'`
    4.使用 git status 能够查看状态 ,会看到 `图书管理.html` 文件在 `Changes to be committed` 这行的下面,说明已被跟踪,并处于暂存状态
    `
    git status \-s //精简的方式是以 一个绿色A?开头,这里是新提交的 也就是第一次提交
    git status  // 文件的颜色是 绿色的
    `
    5.此时文件再暂存区域 须要使用 git commit -m 命令将文件提交到Git仓库
    6.`-m` 选项后面是本次的提交消息,用来对提交的内容作进一步的描述
    `git commit \-m "新建了index.html 文件"`
    7.提交以后查看状态 git status
    `
    On branch master
    nothing to commit working tree clean
    //证实工做区中全部的文件都处于‘未修改的’的状态 没有文件须要提交
    `
    8.对已提交的文件进行修改  目前,`图书管理.html` 文件已经被 `Git` 跟踪,而且工做区和 `Git` 仓库中的 `图书理.html` 文件内容保持一致。当咱们修改了工做区中 `图书管理.html` 的内容以后,再次运行 `git status` 和 `git status -s` 命令
    `文件 `图书管理.html` 出如今 `Changes not staged for commit` 这行下面, 说明已跟踪文件的内容发生了变化,但尚未放到暂存区。`
    **注意** 修改过的、没有放入暂存区的文件前面有红色的 **M** 标记。
    9.暂存已修改的文件目前,
    工做区中的 `图书管理.html` 文件已被修改,若是要暂存此次修改,须要再次运行 `git add` 命令,这个命令是个多功能的命令,主要有以下 3 个功效:
    ① 能够用它开始跟踪新
    ② 把已跟踪的、且已修改的文件放到暂存区
    ③ 把有冲突的文件标记为已解决状态
    `查看状态 文件\`图书管理.html\`出如今\`changes to be commited\` 说明已经被修改的文件存储在缓存中 颜色是绿色 若是是精简的话 前面是绿色的M`
    10.提交已暂存的文件
    `再次运行 \`git commit \-m "提交消息"\` 命令, 便可将暂存区中记录的 \`图书管理.html\` 的快照, 提交到 \`Git\` 仓库中进行保存:`
    11.撤销修改的内容
    `git checkout \-- 图书管理.html // 此时文件尚未进入暂存 // 若是进入缓存 这个命令是起不了做用的`
    12.撤销缓存中内容
    `git reset HEAD 图书管理.html. //撤销暂存中的某一个文件 git reset HEAD . //将缓存中的全部的文件都撤销下来`
    13.跳过使用暂存区域
    ``Git` 标准的工做流程是`工做区 → 暂存区 → Git 仓库`,但有时候这么作略显繁琐,此时能够跳过暂存区,直接将工做区中的修改提交到 `Git` 仓库,这时候 `Git` 工做的流程简化为了`工做区 → Git 仓库`  `Git` 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 `git commit` 加上 `-a` 选项,`Git` 就会自动把全部已经跟踪过的文件暂存起来一并提交,从而跳过 `git add` 步骤:`
    `git commit \-a \-m "日志信息"`
  14. 移除文件
    从 Git 仓库中移除文件的方式有两种:

    • 从 Git 仓库和工做区中同时移除对应的文件
    • 只从 Git 仓库中移除指定的文件,但保留工做区中对应的文件
    # 从 Git仓库和工做区中同时移除 图书管理.js 文件
    git rm -f index.js
    # 只从 Git 仓库中移除 index.css,但保留工做区中的 图书管理.css 文件
    git rm --cached 图书管理.css
  15. 忽略文件

    • 通常咱们总会有些文件无需归入 Git 的管理,也不但愿它们总出如今未跟踪文件列表。 在这种状况下,咱们能够建立一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。
    • 文件 .gitignore 的格式规范以下:

      ① 以 **# 开头**的是注释
      
      ② 以 **/ 结尾**的是目录
      
      ③ 以 **/ 开头**防止递归
      
      ④ 以 **! 开头**表示取反
      
      ⑤ 可使用 **glob 模式**进行文件和文件夹的匹配(glob 指简化了的正则表达式)
    • 星号 * 匹配零个或多个任意字符
    • [abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)
    • 问号 ? 只匹配一个任意字符
    • 两个星号 ** 表示匹配任意中间目录(好比 a/**/z 能够匹配 a/z 、 a/b/z 或 a/b/c/z 等)
    • 在方括号中使用短划线分隔两个字符, 表示全部在这两个字符范围内的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的数字)
  16. .gitignore 文件的例子

    #忽略全部的.a文件
    *.a
    # 即便前面忽略了 .a文件 但跟踪全部的lib.a
    !lib.a
    # 只忽略当前目录下的TODO文件 而不忽略subdir/TODO
    /TODO
    #忽略任何目录下的名为bulid的文件夹
    bulid/
    #忽略doc/notes.txt 但不忽略doc/server/arr.txt
    doc/*.txt
    # 忽略doc/目录及其全部子目录的 .pdf 文件
    doc/**/*.pdf
  17. 查看提交的历史

    # 按时间前后顺序列出全部的提交历史,最近的提交在最上面
    git log
    
    # 只展现最新的两条提交历史,数字能够按需进行填写
    git log -2
    
    # 在一行上展现最近两条提交历史的信息
    git log -2 --pretty=oneline
    
    # 在一行上展现最近两条提交历史信息,并自定义输出的格式
    # &h 提交的简写哈希值  %an 做者名字  %ar 做者修订日志  %s 提交说明
    git log -2 --pretty=format:"%h | %an | %ar | %s"
  18. 回退到指定的版本

    # 在一行上展现全部的提交历史
    git log --pretty=oneline
    
    # 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
    git reset --hard <CommitID>
    
    # 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操做的历史
    git reflog --pretty=oneline
    
    # 再次根据最新的提交 ID,跳转到最新的版本
    git reset --hard <CommitID>
相关文章
相关标签/搜索