0%

Git结构

Git结构

Git分为工作区、暂存区、本地库和远程仓库

写代码时是在工作区进行操作的,使用git add 命令可以将文件加入到暂存区,使用git commit命令可以将暂存区的文件提交到本地库,使用git push命令可以将本地库的文件推送到远程仓库

graph LR
workSpace[工作区]
Index[暂存区]
repository[本地库]
remote[远程仓库]
workSpace--git add-->Index--git commit-->repository--git push-->remote
remote--git pull-->workSpace
remote--git fetch-->repository

这里需要根据.git目录来看

Git目录结构

文件分开来看

先看文件

  • HEAD文件是一个特殊的指针,指向当前所在的本地分支
1
2
# 表示当前分支为master
ref: refs/heads/master
  • index文件是暂存区(git add之后存在index中)

再看目录

  • objects目录,其中存储的是本地库(git commit之后存在objects中 文件夹名为commit_id的前两位,文件名为commit_id的另外38位),有三种不同的对象
    • commit 提交对象,记录版本提交时间、版本作者、版本序列等
    • tree 树对象,记录目录结构
    • blob 数据对象,记录文件的真实内容
  • logs目录,存储的是所有的日志,只会增加不会删除
  • refs目录,存储的是分支、标签、储存、远程分支分别所对应的commit_id,包含三个子目录
    • heads 存放的是一些分支文件,记录了该分支最后一个commit_id,用来定位objects中对应的文件
    • remotes 存放的是远程库的一些分支
    • tags 存放的是标签

git checkout 可以恢复文件

1
2
# 从暂存区获取文件
git checkout -- readme.txt

git reset 从暂存区撤销回来

从一个分支切到另一个分支,为了不把该分支修改的东西带到新的分支中,可以使用

git add 存入暂存区

git stash 先暂存一下

git add 和git stash的区别

  • git add 针对新建文件,执行add命令可自动将文件提交到暂存区
  • git stash 针对被修改的文件,执行stash时,如果是新建文件且没有add则stash无效

欢迎关注我的其它发布渠道