Tutorial from cs61B

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使用指南的更多相关文章

  1. Android Project from Existing Code 生成 R 文件错误、失败等问题解决办法 - 持续更新

    Android Project from Existing Code 生成 R 文件错误.失败等问题解决办法 - 持续更新 git  上的项目,pull下来之后用Android Project fro ...

  2. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  3. 【github&&git】4、git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  4. 【笔记】git 的常用操作命令(持续更新。。。)

    项目正在如火如荼的开展,代码量的繁多不得不令我们运用 git 这个有用的工具去管理我们共同协作的代码 git 在这里不作什么介绍了,百度一大堆的教程 首推廖雪峰老师的:http://www.liaox ...

  5. 开发常用Git/Linux/idea命令快捷键总结(持续更新)

    在开发过程中,会使用越来越多的命令,或快捷键,来帮助我们提高工作效率.本文记录了我在平时积累的常用命令,分享给大家. git命令 基本命令 set LESSCHARSET=utf-8 --idea T ...

  6. git使用技巧集合(持续更新中)

    git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如 ...

  7. 常见 git 需求整理(持续更新中)

    首发于 语雀文档 突然感觉自己对 git 还是挺熟悉的,因为团队里新来的七八号应届生来问我 git 问题,基本没有答不上的情况,但为了能更好地对知识进行整理,还是记录一下为好. (希望能)持续更新.. ...

  8. git使用之错误分析及解决(持续更新)

    错误一: 使用 $ git push -u origin master 出现如下错误: error: src refspec master does not match any. error: fai ...

  9. git的简单使用(一些小操作,持续更新)

    第一次使用git的过程记录 参考了两个文章 菜鸟教程-git简明指南 阮一峰-常用git命令清单 git的几个工作区(此处参考了上面的两篇介绍) 简单步骤如下 git init 在当前目录建立工作区 ...

  10. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

随机推荐

  1. Fiddler初学笔记

    Fiddler简介 Fiddller官网: www.fiddler2.com Fiddler是客户端与服务器端的http代理,是目前最常用的http抓包工具之一. Fiddler能够监听客户端和服务器 ...

  2. python matplotlib通过 plt.scatter在图上画圆

    import matplotlib.pyplot as plt lena = mpimg.imread(r'C:\Users\Administrator.WIN-QV9HPTF0DHS\Desktop ...

  3. CNN-卷积神经网络简单入门(1)

    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习 ...

  4. Linux安装MySQL详细步骤(CentOS6、CentOS7)

    1.查看mysql的依赖(centos7 要把mysql改成mariadb) rpm -qa | grep mysql 2.删除mysql的依赖,可以两个都执行(centos7 要把mysql改成ma ...

  5. Visual Studio 下error C2471: 无法更新程序数据库

    转载请注明来源:https://www.cnblogs.com/hookjc/ 解决方案:修改项目属性 右击项目 --> "属性" 1. "C/C++" ...

  6. 使用 Element UI Select 组件的 value-key 属性,让绑定值可以为一个对象

    EsunR 2019-11-07 12:14:42  12264  收藏 6 分类专栏: Vue 文章标签: element-ui 版权 当我们使用 Elemet UI 的选择组件进行多选时,Sele ...

  7. Vue项目history模式下微信分享总结

    原文 : http://justyeh.top/post/39/ 2019-07-02 Vue微信分享 每回遇到微信分享都是一个坑,目前的商城项目使用Vue开发,采用history的路由模式,配置微信 ...

  8. 抽象类,interface接口,接口和继承的区别

    一.抽象类 需要抽象类的原因:父类方法不确定性的问题.考虑将该方法设计为抽象(abstract)方法所谓抽象方法就是没有实现的方法.所谓没有实现就是指,没有方法体.当一个类中存在抽象方法时,需要将该类 ...

  9. 《PHP程序员面试笔试真题解析》——新书上线

    你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ...

  10. Solution Set -「ABC 217」

      大家好屑兔子又来啦! [A - Lexicographic Order]   说个笑话,\(\color{black}{\text{W}}\color{red}{\text{alkingDead} ...