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目录来看
文件分开来看
先看文件
- HEAD文件是一个特殊的指针,指向当前所在的本地分支
1 | # 表示当前分支为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 | # 从暂存区获取文件 |
git reset 从暂存区撤销回来
从一个分支切到另一个分支,为了不把该分支修改的东西带到新的分支中,可以使用
git add 存入暂存区
git stash 先暂存一下
git add 和git stash的区别
- git add 针对新建文件,执行add命令可自动将文件提交到暂存区
- git stash 针对被修改的文件,执行stash时,如果是新建文件且没有add则stash无效