程序员Git使用

Git核心原理,30分钟搞定

2017-05-31  本文已影响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

核心: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!

上一篇下一篇

猜你喜欢

热点阅读