Git暂存区之Git Diff魔法

在不同参数的作用下,git diff的输出并不相同。在理解了Git中的工作区,暂存区和版本库(当前分支)的最新版本分别是三个不同的目录树后,就非常好理解 git diff 的魔法般的行为了。

工作区,暂存区和版本库的目录树浏览

有什么办法能够像查看工作区一样直观地查看暂存区及HEAD中的目录树吗?对于HEAD指向的目录树,可以使用Git底层命令ls-tree来查看。

$ git ls-tree -l HEAD
100644 blob bb2f2a2c99a6608b400a63a2acf44a441194651a      58    welcome.txt

其中:

  • 使用 -l 参数可以显示文件的大小。上面的 welcome.txt 的大小为58字节。
  • 输出的welcome.txt文件条目从左到右,第一个字段是文件的属性(rw-r--r--),第二个字段说明是Git对象库中的一个blob对象(文件),第三个字段则是该文件在对象库中对应的ID——一个40位的SHA1哈希值格式的ID(这个后面会讲到),第四个字段是文件大小,第五个字段是文件名。

在浏览暂存区中的目录树之前,首先清除工作区当前的改动。通过 git clean -fd 命令清除当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录),然后执行 git checkout  . 命令,用暂存区内容刷新工作区。

时间: 2024-10-05 21:38:21

Git暂存区之Git Diff魔法的相关文章

Git权威指南学习笔记(二)Git暂存区

如下图所示: 左侧为工作区,是我们的工作目录. 右侧为版本库,其中: index标记的是暂存区(stage),所处目录为.git/index,记录了文件的状态和变更信息. master标记的是master分支所代表的目录树.HEAD指向master分支. objects标记的是Git的对象库,所处目录为.git/objects,文件索引建立了文件和对象库中对象实体之间的映射关系. 通过该图我们可以清晰地看出add,commit等命令的转化关系.下面通过git diff和git status两条命

git 暂存区

git的分为四个区----工作区,暂存区,版本库和存储区. 可以用git diff 去检测工作区,暂存区和版本库之间的不同. git diff --cached 检测工作区和暂存区之间的不同. git diff HEAD 检测工作区和版本区之间的不同. git status 显示工作区,暂存区与版本库之间文件不同. git 暂存区,布布扣,bubuko.com

Git 基础(六)—— 工作区和暂存区与 Git 对修改的管理

工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的 learngit 文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库. Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD. 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的: 第一步

Git暂存区之理解Git暂存区(stage)

前一篇blog在实践过程有意无意地透漏了"暂存区"的概念.为了避免用户被新概念吓坏,在暂存区出现的地方又同时使用了"提交任务"这一更易理解的概念,但是暂存区(称为stage或index)才是其真正的名称. 在版本库 .git 目录下有一个index文件,下面针对这个文件做一个有趣的试验.具体操作步骤如下: 1. 首先执行 git checkout 命令(后面再介绍此命令),撤销工作区中 welcome.txt 文件尚未提交的修改. $ git checkout --

完整学习git二 git 暂存区

1 git log 命令查看提交日志信息 git log --pretty-fuller #详细查看 git log --stat #查看每次提交的文件变更 git log --pretty-online 2git diff 对比文件的修改信息 git diff HEAD  git add . 后与当前版本库的头指针比较 git diff --cached 或--staged 提交暂存区和版本库中的文件差异 git 命令是如何影响工作区和暂存区的 左侧为工作区 右侧为版本库 . 版本库中标记为i

git暂存区

在使用git开发时,有三个概念需要知道,工作区,暂存区和版本库.工作区就是直接进行操作的地方,版本库是要将修改提交的地方,那么暂存区是干什么的呢?下面将对暂存区深入研究. 一.修改后能直接提交吗? 在工作区修改后能直接执行git commit提交吗?让我们一起试试. 首先修改welcome.txt文件 echo "welcome">>welcome.txt 使用git diff查看工作区和版本库的差异. 上面显示修改了welcome.txt文件.既然修改了工作区,那就直接提

git学习(四):理解git暂存区(stage)

与一般的版本管理不同的是,git在提交之前要将更改通过git add 添加到暂存区才能提交(git commit).即使是已经交给了git来管理的文件也是如此.这里继续学习git的暂存区. 通过git checkout撤销工作区更改 在版本库.git目录下有一个index文件. 首先执行git checkout命令,撤销工作区中welcome.txt文件尚未提交的修改. 原来可以通过这种方法来撤销修改,妈呀,我还是菜啊.之前使用IDEA的时候只知道用revert. git status和git

git学习(三):git暂存区

回顾之前学过的命令: 1 git init // 初始化一个项目 2 git add // 将文件交给工作区 3 git commit // 提交修改 查看提交日志: 1 git log // 查看提交日志 2 git log --stat // 每次提交文件的变更统计 可进行空的提交,也就是不提交任何文件的修改: 1 git commit --allow-empty 比较差异: 1 git diff // 查看修改后的文件于版本库中文件的差异 修改不能直接提交么? 对于已经commit到版本库

git(工作区,暂存区,管理修改,撤销修改,删除文件)

工作区和暂存区 984次阅读 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的