原理

文件的三种状态

对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

每个项目都有一个 Git 目录(译注:如果 git clone 出来的话,就是其中 .git 的目录;如果 git clone –bare 的话,新建的目录本身就是 Git 目录。),它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

所谓的暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改某些文件。

  2. 对修改后的文件进行快照,然后保存到暂存区域。

  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

所以,我们可以从文件所处的位置来判断状态:如果是 Git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

git的完整工作流程

对象在被git管理过程中所处的4个阶段,分别是:

  • 工作目录
  • index(暂存区)
  • 本地仓库
  • 远程仓库

git完整的工作流程如下图:

从时间先后来讲,工作目录的内容是你当前看到的,也是最新的;index区标记了你当前工作目录中,哪些内容是被git管理的;而本地仓库保存了对象被提交过的各个版本,比起工作目录和暂存区的内容,它要更旧一些;远程仓库是本地仓库的异地备份,远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。任何对象都是在工作目录中诞生和被修改;任何修改都是从进入index区才开始被版本控制;只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;而要与协作者分享本地的修改,可以把它们push到远程仓库来共享。图最上方的 add、commit、push等,展示了git仓库的产生过程。反过来,我们可以从远程历史仓库中获得本地仓库的最后一个版本,clone到本地,从本地检出对象的各个版本到index暂存区或工作目录中,从而实现任何对象或整个仓库的任意阶段状态的”回滚”。当正向和反向都能自由切换后,git就强大到无所不能了。

Git学习文档之一 学习文档-原理相关推荐

  1. webpack搭建vue项目开发环境【文档向学习】

    为何有这篇文章 各个社区已经有无数篇帖子介绍如何使用webpack搭建前端项目,但无论是出于学习webpack的目的还是为了解决工作实际需要都面临着一个现实问题,那就是版本更新.别人的帖子可能刚写好版 ...

  2. 【学习笔记】Windows格式文档转换成Unix格式

    [学习笔记]Windows格式文档转换成Unix格式 我们有时候需要将文档格式从Windows格式转换成Unix格式,Windows下换行是\r\n,而Unix下换行是\n,所以只需要将文档中的\r去 ...

  3. java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署 ...

  4. 石墨文档软件服务器,软件技巧 篇十三:工作学习好帮手,在线文档使用体验之石墨文档...

    软件技巧 篇十三:工作学习好帮手,在线文档使用体验之石墨文档 2019-10-26 21:43:34 6点赞 87收藏 4评论 很多时候,我们在网上写东西,都不会出现各种各样的状况,但有的时候,习惯于 ...

  5. 学习linux压缩命令压缩文档

    学习linux压缩命令压缩文档 ==================================================================================== ...

  6. Unity学习笔记:个人学习项目《疯狂天才埃德加》纠错文档

    Unity学习笔记:个人学习项目<疯狂天才埃德加>纠错文档 本文档是完成学校Unity课程作业时建立的纠错文档.用于记录自己开发过程中遇到的各种问题,以便下次遇到相同的问题时及时找到解决方 ...

  7. java计算机毕业设计计算机类专业考研交流学习平台MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计计算机类专业考研交流学习平台MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机类专业考研交流学习平台MyBatis+系统+LW文档+源码+调试部署 本源 ...

  8. 【自然语言处理】【向量检索】面向开放域稠密检索的多视角文档表示学习

    面向开放域稠密检索的多视角文档表示学习 <Multi-View Document Representation Learning for Open-Domain Dense Retrieval& ...

  9. 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent

    Linux下编译libevent的指导可以参考<4.<Libevent中文帮助文档>学习笔记4:Linux下编译libevent>,完成编译.安装,生成so库后,其他程序即可依 ...

  10. Keras深度学习实战(26)——文档向量详解

    Keras深度学习实战(26)--文档向量详解 0. 前言 1. 文档向量基本概念 2. 神经网络模型与数据集分析 2.1 模型分析 2.2 数据集介绍 3. 利用 Keras 构建神经网络模型生成文 ...

最新文章

  1. python列表切片口诀-Python-100例(7-8) 复制列表 打印乘法口诀
  2. 内联函数的声明和定义
  3. 模型评估准确率、召回率、ROC曲线、AUC总结
  4. 如何重新打开Windows防火墙提示?
  5. 一个基于.Net 5开发的轻量级Quartz配置中心 - QuartzCore.Blazor
  6. CRegKey 注册表操作
  7. 感谢宝贝: 带给我别样人生
  8. 【2019南京icpc网络赛 I】Washing clothes【李超树】
  9. 手机定位浅析 AGPS定位 LBS基站定位 卫星定位
  10. RT-Thread学习笔记六——线程间通讯(信号量的使用)
  11. vue+ts的书写规范
  12. 回首过去,立足当下,展望未来
  13. 百度App性能优化工具篇 - Thor原理及实践
  14. APS高级计划排程 基本概念
  15. 海康设备接入EasyCVR,出现告警信息缺失且不同步该如何解决?
  16. Neural Network Intelligence (NNI) | 自动特征工程AutoFE示例程序
  17. 智能车浅谈 电磁组——环岛处理
  18. 史上最全JVM整体架构和调优参数说明,带你彻底理解JVM整体架构与调优技巧
  19. 某马程序员NodeJS速学笔记
  20. php可以考研,一位学长的考研经历-写给犹豫在考研边缘的你-转的

热门文章

  1. TCP VS UDP
  2. TCP 慢启动 拥塞控制
  3. Linux内核分析 - 网络[二]:网卡驱动接收报文
  4. 嵌入式Linux系统编程学习之一目录结构
  5. 计算机程序制作的小作品,义乌市中小学生电脑作品制作比赛201203
  6. 报送数据标准校验java_Java:数据校验 - osc_gaqp1a2z的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. android csv显示乱码问题,Android CSV解析器问题
  8. 【LeetCode】【HOT】101. 对称二叉树(BFS+队列/递归)
  9. Java面试之synchronized和Lock有什么区别?
  10. 内建函数(builtins)和functools