美文网首页程序员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核心原理,30分钟搞定

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