转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000

0、写在前面

其实,我们每次执行可以改变暂存区或分支的git命令时,只要这个命令操作的文件的内容的散列值还没有在.git/objects目录下作为一个文件的文件名,这个文件就会被添加到.git/objects下,文件名(确切地说散列值的前两个字符会作为一级文件夹名)就是那个散列值,而暂存区和分支里的不过是这个文件的指针而已。作为版本控制的用户,我们主要应关注工作区、暂存区、版本库的关系,.git/objects属于git的底层实现了。

1、工作区、暂存区、版本库

我们执行git init命令的那个目录就是我们的工作区。工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

1.1、把文件从工作区添加到暂存区、版本库中

我们把文件往Git版本库里添加的时候,是可以分两步执行的:

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。你可以简单理解为,需要提交的文件修改都通过git add(可连续多次)放到暂存区,然后,一次性通过git commit提交暂存区的所有修改。

我们要注意:在提交以后,工作区、暂存区、版本库的内容都一样了(暂存区、版本库保存的其实是指针)。git提供了两条命令来比较工作区、暂存区和暂存区、版本库当前分支的差异的命令,分别是

  • 查看工作区、暂存区文件差异: git diff
  • 查看暂存区、版本库当前分支最新一次提交之间的差异: git diff --cached

提交以后我们可以分别执行一下这两个命令,你会发现:“在提交以后,工作区、暂存区、版本库的内容都一样了”。

1.2、从暂存区、版本库恢复文件到工作区

自然,每一个程序员都会犯错误。版本控制系统除了提供我们“版本管理”的功能,还应该可以在我们犯了错以后让我们很方便地回退到前一个版本(丢弃工作区的修改)。相比与其他版本控制系统,git还提供了暂存区功能,因此我们还可以回退到上一次修改而不用回退到上一个版本,提供了更大的自由度。

从暂存区恢复,或称“拿暂存区文件替换工作区文件”(譬如错误还在工作区)命令:

git checkout -- file

从当前分支的最新一次提交恢复,或称“拿版本库文件替换暂存区、工作区文件”(譬如错误已经add到了暂存区)命令:

git reset HEAD file

从当前分支的上上次的提交恢复(譬如错误已经被提交):

详见分支管理篇

1.2.1、git reset命令:

2、文件、文件夹改名:

在我们版本升级过程中,除了文件内容的修改之外,文件名和文件夹名有时候也需要改变。有很多git命令需要了解改名历史,譬如git diff。但git不是记录改名,而是探测改名,每次需要了解改名历史时(一般时-M[<n>]或--find-renames[=<n>]参数),git都会去探测改名,默认时50%相似度。

[git]入门-工作区、暂存区、版本库的更多相关文章

  1. 小丁带你走进git的世界二-工作区暂存区分支

    小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...

  2. Git入门 时光穿梭鸡 版本回退 工作区 暂存区

    分布式集中式 CVS及SVN都是集中式的版本控制系统 , 而Git是分布式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的, 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得 ...

  3. 完整学习git三 查看暂存区目录树 git diff

    1显示暂存区中的目录树 git ls-files git ls-tree git diff 魔法 1工作区与暂存区比较 git diff 2工作区与HEAD比较 git diff HEAD 3暂存区与 ...

  4. Git 基础 - 删除暂存区的文件

    1 直接删除文件 这个文件会有两个操作:已暂存的修改.未暂存的删除 2 直接删除文件 + 记录删除操作 先在工作目录中删除文件,再使用git rm命令记录此次移除文件的操作(删除暂存区中该文件的修改快 ...

  5. Git(1):版本库+工作区+暂存区

    参考博客:https://blog.csdn.net/qq_27825451/article/details/69396866

  6. git 撤回放到暂存区的文件

    git reset HEAD filename 如:git reset HEAD test.txt 或者使用 git reset .  撤回所有文件(注意后面还有个.)

  7. Git-03-工作区和暂存区

    工作区和暂存区的概念 工作区 工作区:就是电脑里能看到的目录,如现在学习的目录github 暂存区 版本库:工作区内有一个隐藏目录 .git,这个叫做版本库 git版本库中有一个重要的区叫做暂存区(i ...

  8. Git使用指南(2)——工作区,暂存区,版本库

    1 工作区修改添加到暂存区 git add 2 暂存区提交到版本库 git commit 3 版本库更新到暂存区 git reset HEAD 4 删除暂存区文件 git rm --cached< ...

  9. 【Git】(1)---工作区、暂存区、版本库、远程仓库

    工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...

随机推荐

  1. node使用ftp模块获取文件夹信息,中文乱码问题

    c.on('ready', function () { c.list(function (err, list) { if (err) throw err list.map(item => { i ...

  2. MySQL:(一)

    数据库概述 什么是数据库 数据库是一个文件系统.通过标准SQL语言操作文件系统中数据——用来存放软件系统的数据! SQL:Structured Query Language 结构查询语言 常用数据库简 ...

  3. HDU - 3652

    #include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #incl ...

  4. SAM宏观生态学空间分析帮助文档

    宏观生态学分析软件帮助文档: 引言: 该软件是由布鲁塞尔..大学开发,目的是提供一个综合的空间分析计算平台,主要针对的是宏观生态学数据.该软件可以从网站...上自由获取,该软件的主要特征以及发表在20 ...

  5. DAY16 模块和包的导入

    一.包 1.包的定义 包:就是一系列模块的结合体 2.重点 1.包中一定要有一个专门来管理包中所有模块的文件 2.包名:存放一系列模块的文件夹名字 3.包名(包对象)存放的是管理模块的那个文件的地址, ...

  6. 杂记:防火墙、企业微信登陆、RestFrameWork

    192.168.0.250重启后查看端口正常,外部ping得通,但是访问192.168.0.250进不了Nginx欢迎界面 netstat -tlunp 关闭了防火墙就行了,原来80端口都要防火墙. ...

  7. oracle 将一个表复制到另外一个表里 .

    复制一个表到另一个表.视图.临时表 博客分类: oracle Oracle数据结构软件测试SQL 创建一个表new_table和old_table表结构一样(没有old_table的记录) creat ...

  8. vue2 inheritAttrs、attrs和attrs和listeners使用

    inheritAttrs.attrs和attrs和listeners使用场景: 组件传值,尤其是祖孙组件有跨度的传值. (1)inheritAttrs 属性说明:https://cn.vuejs.or ...

  9. 菜鸡学C语言之真心话大冒险

    题目描述 Leslie非常喜欢真心话大冒险的游戏.这一次游戏的规则有些不同.每个人都有自己的真心话,一开始每个人也都只知道自己的真心话.每一轮每个人都告诉指定的一个人他所知道的所有真心话,那么Lesl ...

  10. MVC架构模式详细说明

    一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...