基本概念
工作区:项目中本地文件被修改的区域。
暂存区:工作区中本地文件的改动通过"git add"放入暂存区。
本地仓库:最后暂存区的修改通过"git commit"放入本地仓库。
存储
暂存区:
- 通过"git add"把工作区内容加入暂存区。
- 通过"ls -l .git/index"看到.git/index的更新时间和大小都变了说明该文件和暂存区有关。
- 直接打开.git/index发现是乱码,因为是二进制内容。git提供了"git ls-files"显示暂存区的文件内容。
- 文件内容包括40位的字符(hash)和文件在项目中的路径,还是没有修改文件的具体内容。
- .git/objects中可以找到.git/index中hash对应的文件,同样直接打开是二进制。
- 通过"git cat-file -p hash"查看具体的内容,展示了刚加入暂存区的文件内容。
- 本地仓库最基本的是分支,分支上有提交,提交有提交信息,能追溯到上一次提交
- .git/HEAD中存储着当前引用的分支文件的路径,指向了.git/refs/head中的文件,文件内容是40的字符hash,正是"git log"最近一次的commitID
- 通过"git cat-file -t hash"查看这个hash是个commit。
- 同样通过"git cat-file -p hash"查看commit对应的二进制文件,包括tree、parent、author、commit日志等。
- 这个parent正是"git log"中当前commit的上一次commit,这就是commit能链式追溯的原因。
- 而通过"git cat-file -p hash"查看tree,内容就是包含本次修改的文件的路径和hash列表,具体的文件内容可以在.git/objects的文件中找到。
暂存区的意义:一个是通过"git add -i"让开发区的部分文件添加到开发区,另一个是git merge过程中没冲突的文件合并文件直接添加到暂存区。
reset
git reset --hard | --mixed | --soft commitID
--hard 把开发区、暂存区、本地仓库都还原到某个commit
--mixed 把暂存区、本地仓库还原到某个commit
--soft 把本地仓库还原到某个commit
常见应用:
- "git reset --hard HEAD",把暂存区和开发区的更新都去掉。
- "git reset --soft commitID",把连续几次的commit合并到一个。
- "git reset --mixed HEAD filename",用本地仓库的最近提交的某个文件还原暂存区,相当于"git checkout filename"把添加到暂存区的某个文件撤销。
checkout
推荐阅读
- git|Windows下使用git bash提示“fatal: protocol 'https' is not supported”的解决办法(不用删https再加上)
- [Git篇]保姆级建立git仓库教程!!!
- 一些容易遗忘的操作|通过ssh上传github仓库
- c++|【Rust日报】2022-03-23 RustSBI软件发布v0.2.2版本
- 其他|如何将本地文件上传到Gitee
- github|github太慢了(两种方式解决这个痛!.)
- 个人领悟|在电脑上使用tomcat部署项目时的常见问题
- 一步一步探索 git reset
- git|使用git命令把代码上传到Gitee本地仓库