Git 工作区、暂存区和版本库

基本概念

我们先来理解下 Git 工作区、暂存区和版本库概念:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 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 命令时,会直接从暂存区删除文件,工作区则不做出改变。
  • 当执行 git checkout . 或者 git checkout — 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
  • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

若文章对你有帮助,可以点赞或打赏支持我们。发布者:AaronYang会员,转载请注明出处:http://61.174.243.28:13541/AY-knowledg-hub/git-%e5%b7%a5%e4%bd%9c%e5%8c%ba%e3%80%81%e6%9a%82%e5%ad%98%e5%8c%ba%e5%92%8c%e7%89%88%e6%9c%ac%e5%ba%93/

(0)
AaronYang的头像AaronYang会员认证作者
上一篇 2024年 4月 30日 上午8:40
下一篇 2024年 4月 30日 上午8:42

相关推荐

  • lscpu

    文章目录lscpu补充说明语法选项参数例子 lscpu 显示有关CPU架构的信息 补充说明 lscpu命令 是显示有关CPU架构的信息。 语法 lscpu [选项] 选项 -a, …

    入门教程 2023年 12月 19日
  • setsid

    文章目录setsid补充说明语法选项实例 setsid 在新的会话中运行程序 补充说明 setsid命令 子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如…

    入门教程 2024年 3月 4日
  • HTML 段落

    HTML 可以将文档分割为若干段落。 文章目录HTML 段落实例不要忘记结束标签HTML 折行实例HTML 输出- 使用提醒HTML 标签参考手册 HTML 段落 段落是通过 &l…

    2023年 4月 11日
  • if else 语句

    if else 语句 上一节:第七篇 包下一节:第九篇 循环语句 这是本Golang系列教程的第8篇。 if 是一个条件语句。if 语句的语法为: if condition { }…

    2023年 12月 5日
  • HTTP 状态码

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)…

    2023年 5月 14日
  • dhcpd

    文章目录dhcpd语法选项例子 dhcpd 运行DHCP服务器 语法 dhcpd [选项] [网络接口] 选项 -p <端口> 指定dhcpd监听的端口 -f 作为前台…

    入门教程 2023年 12月 7日
  • vgremove

    文章目录vgremove补充说明语法选项参数实例 vgremove 用于用户删除LVM卷组 补充说明 vgremove命令 用于用户删除LVM卷组。当要删除的卷组上已经创建了逻辑卷…

    入门教程 2024年 3月 11日
  • neofetch

    文章目录neofetch补充说明安装语法返回 neofetch 显示带有发行徽标的系统信息的工具 补充说明 neofetch 支持Linux/Unix、Windows、macOS。…

    入门教程 2024年 1月 10日
  • lprm

    文章目录lprm补充说明语法选项参数实例 lprm 删除打印队列中的打印任务 补充说明 lprm命令 用于删除打印队列中的打印任务。尚未完成的打印机任务会被放在打印机贮列之中,这个…

    入门教程 2023年 12月 19日
  • ifdown

    文章目录ifdown补充说明语法参数实例 ifdown 禁用指定的网络接口 补充说明 ifdown命令 用于禁用指定的网络接口。 语法 ifdown(参数) 参数 网络接口:要禁用…

    入门教程 2023年 12月 19日
Translate »