【持续更新】Git使用指南
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之后的版本将被丢弃)
【持续更新】Git使用指南的更多相关文章
- Android Project from Existing Code 生成 R 文件错误、失败等问题解决办法 - 持续更新
Android Project from Existing Code 生成 R 文件错误.失败等问题解决办法 - 持续更新 git 上的项目,pull下来之后用Android Project fro ...
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- 【github&&git】4、git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- 【笔记】git 的常用操作命令(持续更新。。。)
项目正在如火如荼的开展,代码量的繁多不得不令我们运用 git 这个有用的工具去管理我们共同协作的代码 git 在这里不作什么介绍了,百度一大堆的教程 首推廖雪峰老师的:http://www.liaox ...
- 开发常用Git/Linux/idea命令快捷键总结(持续更新)
在开发过程中,会使用越来越多的命令,或快捷键,来帮助我们提高工作效率.本文记录了我在平时积累的常用命令,分享给大家. git命令 基本命令 set LESSCHARSET=utf-8 --idea T ...
- git使用技巧集合(持续更新中)
git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...
- 常见 git 需求整理(持续更新中)
首发于 语雀文档 突然感觉自己对 git 还是挺熟悉的,因为团队里新来的七八号应届生来问我 git 问题,基本没有答不上的情况,但为了能更好地对知识进行整理,还是记录一下为好. (希望能)持续更新.. ...
- git使用之错误分析及解决(持续更新)
错误一: 使用 $ git push -u origin master 出现如下错误: error: src refspec master does not match any. error: fai ...
- git的简单使用(一些小操作,持续更新)
第一次使用git的过程记录 参考了两个文章 菜鸟教程-git简明指南 阮一峰-常用git命令清单 git的几个工作区(此处参考了上面的两篇介绍) 简单步骤如下 git init 在当前目录建立工作区 ...
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
随机推荐
- 在Linux虚拟机上挂载文件卷
一 通过跳板机 将卷挂载在ec2 实例上的方法. 1 查询 机器上挂载了那些卷? // lsblk 是否已经是挂载卷 查看后面的目录 如果没有就是未挂载. 2 操作未挂载卷? /* sudo file ...
- 第09讲:Flink 状态与容错
Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...
- 如何在 IDEA 中添加 Maven 项目的 Archetype(解决添加不起作用的问题)
前言 在 IDEA 中点击新建 Maven 模块,会发现他已经为我们罗列出来了许多的 archetype,但有些时候满足不了我们的需求.下面就来看看如何添加自己的脚手架吧. 实现过程 新建模块 在 I ...
- 基础学习:关于this在派生类构造函数中的理解
https://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/09/313551.html 看了上面这篇文章有感,特做了个小样板,以加深对于this在 ...
- Net6 DI源码分析Part2 Engine,ServiceProvider
ServiceProvider ServiceProvider是对IServiceProvider实现,它有一个internal的访问修饰符描述的构造,并需要两个参数IServiceCollectio ...
- Request与Response
前言 request和response对象是由服务器创建的.我们来使用它们: request对象是来获取请求消息,response对象是来设置响应消息. Request 定义 服务器进行创建,通过该对 ...
- curl 查看接口的网络分段响应时间
示例如下 curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_tota ...
- MySQL 数据库高级操作 (配图)
MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...
- JavaScript中this的绑定规则
JavaScript中this的绑定规则 前言 我们知道浏览器运行环境下在全局作用域下的this是指向window的,但是开发中却很少在全局作用域下去使用this,通常都是在函数中进行使用,而函数使用 ...
- ubuntu Python2 升级Python3
今天买了一台阿里的服务器, 想搭建一个爬虫, 但是 服务器是python2的, 需要升级到python3 1. 下载python3的包 wget https://www.python.org/ftp/ ...