git工作原理

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。

图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

 

转载于:https://www.cnblogs.com/StaYWARM/p/7662206.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端基础进阶】JS-Object 功能详解

Object.assign(target,source1,source2,...)该方法主要用于对象的合并&#xff0c;将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性&#xff0c;不拷贝继承的属性。Object.assign方法实行的是浅拷贝&#xff0c;而不是深拷贝。也就是说&am…

解决“无法从套接字读取更多数据”

重启下Oralce服务即可。转载于:https://www.cnblogs.com/fkeyta/p/9153297.html

网页下载Google Play 的App

网页下载Google Play 的App 文章目录[点击展开](?)[] 前言 当你想在google play上下载某个应用&#xff0c;而无奈手机的系统并没有安装google servicess&#xff0c;此刻是否有些捉急&#xff1f; 本文分享的是一个网站&#xff0c;它可以无需手机而直接通过网页下载Google P…

“硬核”代码重构

在学习编程的路上&#xff0c;相信大家这几个词一定不少听&#xff0c;什么 面相对象、封装继承多态、内功心法21种设计模式 等等 。但是却很少用到&#xff0c;或者说用到的都是被动使用。大牛们在写代码前早就构思好了&#xff0c;接口&#xff0c;基类等等。自己写代码的时候…

上传jar包到nexus私服

进入maven管理页面&#xff0c;登录管理员账号 完成后可以进入对应目录下查看pom依赖 通过maven的方式depoly 在maven的conf/setting.xml 配置nexus私服的管理账号 在servers标签下添加server <server><id>nexus-snapshots</id><username>repouser<…

手把手教你写高质量Android技术博客,画图工具,录像工具,Markdown写法

前言 作为程序员&#xff0c;写博客是一件很有意义的事情&#xff0c;可以加深自己对技术的理解&#xff0c;可以结交更多的朋友&#xff0c;记录自己的技术轨迹&#xff0c;而且分享可以让更多的人从中受益&#xff0c;独乐乐不如众乐乐嘛。 但是要写好博客也不是件容易的事&a…

【Android】RxJava的使用(四)线程控制 —— Scheduler

前言 经过前几篇的介绍&#xff0c;对RxJava对模式有了一定的理解&#xff1a;由Observable发起事件&#xff0c;经过中间的处理后由Observer消费。&#xff08;对RxJava还不了解的可以出门左拐&#xff09;之前的代码中&#xff0c;事件的发起和消费都是在同一个线程中执行&am…

sed: -e expression #1, unknown option to `s'解决办法

报错如下&#xff1a; sed: -e expression #1, char 13: unknown option to s 需要替换的行为&#xff1a; monitor.urlhttp://192.168.25.100:8443/rest 查询资料得知&#xff0c;报错是因为替换的字符串包含有分隔符/ 所以这行改一下分隔符就可以解决问题了 改成感叹号!或者|…

Linux常用开发环境软件-Redis安装(docker环境下)

linux&#xff0c;docker安装RabbitMQ版本 1、从docker官网仓库下载安装RabbitMQ镜像 官网地址&#xff1a;https://hub.docker.com/ docker pull redis:4.0.8  //后面是版本,Tag Name 2、启动Docker Redis镜像 docker run -d -p 6379:6379 redis:4.0.8  启动镜像&#xff…

以当天日期时间,打包目录

#备份/data目录#!/bin/bash DATEdate %Y-%m-%d-%H:%M:%S tar cvf /mnt/resource/script/prod_master_data.$DATE.tar.gz /data[root111 script]# ll total 2536 -rw-r--r-- 1 root root 2590720 Feb 22 21:46 prod_master_data.2019-02-22-21:46:53.tar.gz转载于:https://blog.…

lvs+keepalived详解

常用软件安装及使用目录 资源链接&#xff1a;https://pan.baidu.com/s/15rFjO-EnTOyiTM7YRkbxuA 网盘分享的文件在此 官网&#xff1a;http://www.linuxvirtualserver.org/index.html 中文资料 LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html …

微信自动打卡

要有第二台安卓 手机&#xff0c;打开usb、adb调试&#xff0c;永不锁屏&#xff0c;永不休眠&#xff0c;手机安装了微信并至少成功登陆过一次&#xff0c; 一台不关机的电脑&#xff0c;手机连接电脑&#xff0c;Appium服务器保持启动&#xff0c;在开始菜单 设定好任务计划程…

利用反射做类参数的校验

需求描述 业务需求描述&#xff1a;对webservice接口参数校验 代码实现 /*** 字符串长度校验* * param str* param len* return 合法(true),不合法(false)*/public static boolean check(String str, int len) {if (null ! str && str.length() > len) {return fals…

跨域的四种方式

本文主要是关于跨域的几种方式&#xff0c;关于什么是跨域这里就不多说了&#xff0c;写这个也是为了记住一些知识点的。 一. jsonp jsonp的跨域方式很容易理解&#xff0c;页面的的每一个script标签浏览器都会发送get请求获取对应的文本资源&#xff0c;获取到了之后&#xff…

Linux之read命令使用

ead命令&#xff1a; read 命令从标准输入中读取一行&#xff0c;并把输入行的每个字段的值指定给 shell 变量 1&#xff09;read后面的变量var可以只有一个&#xff0c;也可以有多个&#xff0c;这时如果输入多个数据&#xff0c;则第一个数据给第一个变量&#xff0c;第二个数…

python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包

楔子 假如有一个函数&#xff0c;实现返回两个数中的较大值&#xff1a; def my_max(x,y):m x if x>y else yreturn mbigger my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了&#xff1f;可是你们有没有想过&#xff0c;我们为什么要把结…

hive(II)--sql考查的高频问题

在了解别人hive能力水平的时候&#xff0c;不管是别人问我还是我了解别人&#xff0c;有一些都是必然会问的东西。问的问题也大都大同小异。这里总结一下我遇到的那些hive方面面试可能涉及的问题 1、行转列&#xff08;列转行&#xff09; 当我们建设数据仓库时&#xff0c;我们…

java概述

一、java平台无关&#xff1a;jvm二、java健壮语言&#xff1a;无指针&#xff0c;语法上无指正&#xff0c;无内存申请与释放。 三、java核心机制而&#xff1a; jvmjava垃圾收集机制 GC四、java运行过程&#xff1a;源程序&#xff08;.java&#xff09;——》java编译器——…

时间间隔

计算当前时间与上次执行时间的时间间隔。 NSTimeInterval timetravel [[NSDate date]timeIntervalSinceDate:self.lastPlaySoundDate];if (timetravel<3.0) {DLog("时间太短&#xff0c;。。");}self.lastPlaySoundDate [NSDate date]; 转载于:https://www.cnb…

.Net+MySQL组合开发(二) 数据访问篇

一、建立数据库、表、添加数据这里我们使用图形化操作的SQL Manager 2005 Lite for MySQL来建立数据&#xff0c;它的操作界面非常类似OFFICE软件&#xff0c;使用方便、很容量上手、下面开始建立数据库及表单击"Creat New DataBase"&#xff1a;新建DB输入密码&…