是时候我们该聚焦于git的暂存区部分了;当我们上次添加文件的一部分(“git add
git的暂存区允许你冻结状态树的一部分,这样随后的“git commit”的就会把冻结的这部分提交。许多的版本系统都是让你在提交的时候冻结所以没有这个中间状态;当你第一次使用git的时候,你通常会“git add”然后理解执行“git commit”,甚至是设置别名把这两件事一起做了。
【理解git暂存区】所以git为什么要有暂存区的概念呢?记着,git使用内容寻址的文件;换句话说,当你执行特定的内容片段的时候会有同样的identity。当你运行git add 把那个对象添加到对象库中的时候会发生什么。当对象被添加的同事,还需要一个指针指向它。所以有个被称为暂存区的虚拟树,它包含了一个指向blob和文件映射的树。
当前add文件或者rm文件的时候,实际上最重修改了这个树,这个树包含了你接下来要提交的部分。当运行commit命令的时候,它通过这个虚拟树构建一个真实的树对象,并且把它提交到库里(同时肯定会更新分支)。
尽管这个特性不会立即有用途(并且有些争论认为这是git比其它系统更复杂部分),但是它在特定的操作中是很有用的:
当运行“git status”的时候,控制台日志会告诉我们暂存区和开发区的对应关系,提示我们git发现的文件的diff信息。为了加速处理,git通常使用时间戳确定文件是否改变,但是此时会全面扫描处理内容的hash来确定文件的差异。
暂存的内容实际上是被修改文件的快照。例如:上面展示的重命名和修改被存到了暂存区,同时修改了但没有存到暂存区的不能被提交。暂存区同样和本地库有了区分。
所以一个文件可能三个备份,包括之前被提交到本地库的版本,当前开发区的版本,被存到暂存区的版本。这就是为什么会在“git status”的时候同一个文件会出现两个status信息。可以使用git diff 展示暂存区和开发区同一个文件的区别。
引用 https://alblue.bandlem.com/20...
推荐阅读
- 源代码管理SVN|源代码管理工具SVN和Git小结
- git使用|git---主分支同步到子分支
- CSCI 2134 Using Git
- Git合并策略选项及示例
- git|Ubuntu 20上安装 gitlab git 服务器
- docker|使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放
- Spring|Docker安装gitlab及修改gitlab密码
- AI 智能卡证分类(行政人力减负新神器,「金三银四」轻松度过)
- PLG SaaS 时代,《2022年 如何做好内容营销》白皮书