【持续更新】Git使用指南
2024-09-08 10:52:19
1. 理解Git的不同视角
文件状态图
从状态视角理解git: 一个文件有4种状态, 状态转换如图所示
从存储视角理解git:
- 工作区:电脑里能看到的目录
- 暂存区(stage/index):一般存放在.git目录下的index文件中,保存所有staged files.
- 版本库:.git目录就是版本库, 包含了git系统的所有信息, 当然也包含暂存区. 比较重要的信息包括每个版本的目录树(可以理解为工作区的一个版本)
首先理解清楚版本的概念:
图中的一个结点就是一个版本的目录树, HEAD是一个游标,指向一个版本(与版本库交互是通过HEAD指针). 不同分支如上图所示, 不过是版本链的分支.
object是实质存储文件内容的地方, 暂存区、版本等只是存储object中某位置的索引. 但为了直观理解, 我们不妨简单理解文件就存储在暂存区、版本中
接下来从存储视角理解几个git指令的作用:
初始时暂存区与工作区一致.
git add <file>:将工作区的
file
更新至暂存区git commit:将暂存区的所有文件形成一个新的版本, 加入版本链并使当前分支的HEAD指向该版本
git reset:将HEAD指向的版本更新到暂存区,工作区不受影响。若添加--hard选项则同时更新工作区
git rm <file>:将暂存区和工作区的
file
删除. 如果加上--cached选项则只删除暂存区git checkout <HEAD>: 用HEAD指向的版本替代工作区和暂存区(此时原来工作区中未add的改动和暂存区中未commit的改动).
- git checkout -- <file>:用暂存区中的file替代工作区
- git checkout -b|-B <new_branch>:创建一个新分支(新分支的HEAD指向原来分支HEAD指向的版本, 即上图的交点处)并切换过去(-B使得不存在就新建一个, 已存在就覆盖)
- git checkout [--detach] <commit>:先把head指向commit, 然后按上述checkout HEAD进行更新. (HEAD之后的版本将被丢弃)
最新文章
- requirejs使用
- 对ASP.NET Cookie的一些新的认识
- 常用的MyEclipse快捷键
- ClusterWare 服务介绍
- iOS 错误及解决汇总
- jquery判断对象是否显示或隐藏
- lesson - 7 课程笔记 vim
- Python模拟登录成功与失败处理方式(不涉及前端)
- “百度杯”CTF比赛 九月场_Code(PhpStorm)
- 【WebGIS系列】Typescript+WebGL+Webpack开发环境搭建
- hbuilder IOS APP 打包与发布
- nginx系列5:nginx的请求处理流程
- JavaScript 特效之四大家族(offset/scroll/client/event)
- HQL实用技术
- 27.用webpack自搭react和vue框架
- Gradle 的下载安装配置以及创建第一个Gradle 项目
- 新版POI如何获取日期类型的cell的值
- 源码 time sleep
- SceneKit下关于修改SCNNode 的Shader展示自定义图形
- MongoDB Replica Set搭建集群