美文网首页程序员Git使用
Git核心原理,30分钟搞定

Git核心原理,30分钟搞定

作者: 抓手时光之刃 | 来源:发表于2017-05-31 01:08 被阅读0次

关于git有很多文章,主要是从命令操作角度、场景功能来讲解的,比如Git教程 - 廖雪峰的官方网站,前辈的文章非常优美,阅读次数超过了650w,OMG,膜拜。
这个小文章从数据角度来,来讲解git的功能和命令

核心:工作区、暂存区、版本库

  1. 工作区:你当前进行工作的区域,是文件系统的概念
  2. 版本库:记录了你工程某次提交的完整状态和内容,这意味着你的数据永远不会丢失。
  3. 暂存区: 记录了下次提交将要保存到版本库中的文件

简单来说, GIT流程就是将工作区中的文件,先保存到暂存区中,当执行commit的时候,将暂存区中的文件保存到版本库中!如果暂存区没有内容,就没有办法commit!

从数据操作角度来说,分成如下几种

  • 工作区与暂存区之间的数据交互
  1. 将工作区文件保存到暂存
    git add
  2. 清除暂存区文件
    git reset -- index.html (删除暂存区的修改)
    git rm --cached (删除暂存区的文件,工作区文件不删除)
  3. 将暂存区文件还原到工作区
    git checkout -- index.html
  • 暂存区与版本库的数据交互
  1. 将暂存区的文件保存到版本库
    git commit
  2. 撤销版本库最后一次提交


    image.png

    git reset --mixed HEAD^ (撤销上次commit,工作区不变,暂存区清空)


    image.png
    git reset --soft HEAD^ (撤销上次commit,工作区、暂存区恢复到最后状态,可以重新commit)
    image.png

    git reset --hard HEAD^ (撤销上次commit,工作区回退,暂存区清空)


    image.png
    git revert (做了一个反向修改的commit)
    image.png
    3 . 将版本库内容还原到暂存区
    git reset --soft HEAD
  • 其他

    1. 版本库内容还原到工作区
      git reset --hard HEAD

核心:blob、tree、commit、refs(分支、tag)

  1. blob 对象保存的仅仅是文件的内容

  2. tree 对象更像是操作系统中的文件夹,它可以保存blob对象和tree 对象。一个单独的 tree 对象包含一条或多条 tree 记录,每一条记录含有一个指向 blob 对象或子 tree 对象的 SHA-1 指针,并附有该对象的权限模式 (mode)、类型和文件名信息等:


    image.png
  3. commit 对象的格式很简单:指明了该时间点项目快照的顶层tree对象、作者/提交者信息(从 Git 设置的 user.name 和 user.email中获得)以及当前时间戳、一个空行,上一次的提交对象的ID以及提交注释信息

    image.png
    总结:,blob为文件内容,tree记录了文件信息、blob sha1信息,commit是根据tree计算得到的快照id。
  4. refs是References的缩写。引用是变量名(名字),值指向commit对象,方便追踪代码的变化


    image.png

总结:,NND,分支、tag的信息就是一个指针啊,这样消耗资源非常少啊,所以可以多创建分支、多创建分支。
PS,删除分支时,是不是删除了refs变量名啊,所以commit、tree、blob都没有删除?对吧?

本地版本、remote版本

这个不展开介绍,仅列几个命令
git fetch (拉起远程版本库,但是不合并到本地版本库)
git pull (拉取远程版本库,合并到本地版本库)
git push (推送到远程版本库)
git merge

额外:隐藏区

由于git适合多分支切换开发,所以有时候需要将修改临时保存一下,当分支开发完成后,切换回来继续修改之前的内容。所以git提供了一个很少用但是很有用的功能,git stash,仅列几个命令
git stash save 保存当前工作目录文件
git stash restore 恢复保存的工作目录文件
git stash drop 删除保存记录
git stash pop 恢复最后一个的工作目录文件,并删除保存记录
git stash list 查看所有保存记录
git stash clear 删除所有保存记录

来一个🌰

# ... hack hack hack ...
$ git stash
$ edit emergency fix
$ git commit -a -m "Fix in a hurry"
$ git stash pop
# ... continue hacking ...

结束

Mission Complete!

相关文章

  • git核心原理

    首先,每一个 git 目录都有一个名为 .git 的隐藏目录,关于 git 的一切都存储于这个目录里面(全局配置除...

  • Git核心原理,30分钟搞定

    关于git有很多文章,主要是从命令操作角度、场景功能来讲解的,比如Git教程 - 廖雪峰的官方网站,前辈的文章非常...

  • GIT实战

    git实战 git与svn的区别 git核心命令使用 git底层实现原理剖析 基于git通信协议搭建git私服 基...

  • 做demo和学习过程当中遇到的一些问题,收集的博文

    轻松搞定JSONP跨域请求--->关键字: 跨域, 同源策略, JSONP原理 git拉取远程分支到本地 git ...

  • Git系列之底层原理篇

    本章节是Git的核心知识点,主要是介绍Git底层原理与在使用Git过程中的几个重要区域,弄懂Git的整个使用流程,...

  • git入门2--核心原理

    Git使用40个16进制字符分SHA-1 Hash哈希算法来唯一标识对象,基于Git中文件的内容和目录结构计算出来...

  • git理解

    内部原理实例git命令 内部原理 当git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎...

  • 【Git原理】深入理解git add和git commit命令

    前言 年前在公司内部做了一次git原理分享,现在在这里分享其中核心部分之一:关于git add和commit命令的...

  • git操作

    Git原理 Git常用命令

  • [搞定开源] 第三篇 retrofit 2.4.0与设计模式

    Android开源项目原理系列 [搞定开源] 第一篇 okhttp 3.10原理[搞定开源] 第二篇 okio 1...

网友评论

    本文标题:Git核心原理,30分钟搞定

    本文链接:https://www.haomeiwen.com/subject/eiddfxtx.html