抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

本页的主要内容均转自其它博客,并结合个人经验进行了优化,仅供记录之用

本文介绍 Git 中工作区、暂存区和版本库之间的关系。

基本概念

Git 的主要工作环境有以下三种:

  • 工作区:使用 Git 控制的主要内容,版本管理的主要对象;
  • 暂存区: .git 中的 index 文件,因此也被称为索引;
  • 版本库: .git 文件夹,默认隐藏,用于存放控制工作区版本的 Git 文件。

三者之间的关系如图所示:

工作区、暂存区和版本库之间的关系

工作区与版本库在空间上占据了整个工作目录,在时间上交替工作。

HEAD/.git/HEAD )为指向当前版本的可变指针,通过控制其指向来控制使用的版本。

objects/.git/objects/ )为 Git 的对象库,包含了其创建的各种对象及内容。

基本操作

  • 执行新增(或修改)操作 git add 时,暂存区的目录树会被更新,同时工作区新增(或修改)的文件内容会被写入到对象库中的一个新的对象中,而该对象的 ID 被记录在暂存区的文件索引中。该命令通常会以带有参数的 git add <file>git add . 命令来增加指定文件或全部文件到目录树中。
  • 执行提交操作 git commit 时,暂存区的目录树会写入到版本库(对象库)中,HEAD 指向的分支会做相应的更新。即 HEAD 指向的分支的目录树就是提交时暂存区的目录树。
  • 执行撤销操作 git reset HEAD 时,暂存区的目录树会被重写,覆盖内容为 HEAD 指向的分支的目录树。

该操作不影响工作区

  • 执行删除操作 git rm --cached 时,会从暂存区删除文件,文件名通过附带参数 <file> 指定,整体命令形式为 git rm --cached <file>

该操作不影响工作区

  • 执行回滚操作 git checkout .git checkout <file> 时,会将暂存区全部或指定的文件替换工作区的文件。

该操作具有危险性,因为会清除工作区中未添加到暂存区中的改动

  • 执行切换操作 git checkout HEAD .git checkout <file> 时,会用 HEAD 指向的分支中的全部或指定文件替换暂存区和工作区的文件。

该操作极具危险性,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动

上述命令中的 <file> 可以是单个文件,也可以是多个文件。指定多个文件的方式为用空格隔开,即 <file1> <file2> <...>

评论



This is a picture without description

This is a picture without description This is a picture without description This is a picture without description