linux下文本的新建和追加内容

git cat-file -p ID可查看当前master的数据

观察Git 內部如何储存Commit

随便便抓一個 Commit 的 SHA1 开始:

git cat-file -p a08181bf3(观察这个commit,找出 tree 位置 )

git cat-file -p ea44d629 (观察 tree,找出任一个 blob SHA1)

git cat-file -p d9647d8a (观察blob 的內容)

通过git diff命令,可比较工作区与暂存区的差异



“diff --git a/index.html b/index.html” ,代表的是对git里面的命令,进行可视化显示。其中“a/index.html”和“b/index.html ”分别代表的是暂存区和工作区中的index.html文件。

index 6cef113..684ae9d 代表两个版本的git哈希值(暂存区的文件对象对应的哈希值6cef113,与工作区文件对应的哈希值684ae9d )。

我们可以通过git cat-file -t查看git哈希值的类型

可通过 git cat-file -p查看其内容

"@@ -1,2 +1,3 @@" 代表差异的定位语句,减号后是原文件的开始行号和行数(若只有一行,就不显示行数)。加号后是新文件的开始行号和行数。

上面的意思表示原文件从第一行开始,只有两行。新文件从第一行开始,共三行

"---" 表示变动前的文件

"+++" 表示变动后的文件

“abcdef”前面的+号,代表该行是新增的。

关于文件内容内容的每一行最前面,会有一个标记位。

如果为空,表示该行无变化

如果是感叹号(!),表示该行有改动

如果是减号(-),表示该行被删除

如果是加号(+),表示该行为新增

100644 代表当前文件类型和权限,100代表regular file,644代表权限是:拥有者(读+写),所属组(读),其他人(读)

四、如何比较工作区与本地仓库的差异

通过git diff HEAD命令,可比较工作区与本地仓库的差异。

五、如何比较暂存区与本地仓库的差异

通过git diff --cached 命令,可比较工作区与本地仓库的差异。(没测试成功,原因不明)

六、如何撤回工作区的改动

在git的工作区里面,有的时候,不小心改动了某个文件,可以使用git checkout -- file来取消上次改动,原理:把暂存区的数据加载到工作区覆盖掉修改

七、如何撤回工作区的提交

撤回工作区的提交,也就是将暂存区里面,因本次工作区里提交,而修改的blog对象,回退到修改为之前的blog对象。

有的时候,需要提交到暂存区的文件很多,为了简便,我们执行了如下命令:


git add .

将工作区内所有文件(已经添加git跟踪的文件和尚未添加到git跟踪的文件),统统搞到暂存区,那么怎样撤回其中一个多少几个文件呢?

当然是有的,我们可以使用git reset HEAD(或者git reset,HEAD可缺省)来从暂存区删除内容,原理:在版本库中把当前版本数据加载到暂存区覆盖掉原来的

八、如何撤回暂存区的提交

当我们执行了git commit 的时候,发现提交的内容有问题,或是不应该提交,我们怎样取消上次提交呢?

其实,就是改变版本库当前分支指向的commit对象。首先来了解什么是HEAD

HEAD是一个引用,引用的是当前的分支,如果当前处于master分支,那么HEAD就会指向master

比如,通过git log查看所有提交(思考:git log 跟 git reflog 的区别)

git log只有当前所在版本之前提交的commit记录,git reflog有所有对本地版本库的操作记录

如何比较两次提交(两个版本)中的文件的差异

可以用git diff 哈希值 哈希值,哈希值是Blog类型

当然,我们也可以通过git cat-file -p命令查对应commit(版本)的内容

branch 指向該 branch 最新的 commit

HEAD 指向 current branch

参考

参考二

个人网站

git 查看和撤销的更多相关文章

  1. 【Git】Git 本地的撤销修改和删除操作

    一:撤销操作 比如我现在在readme.txt文件里面增加一行 内容为555555555555,我们先通过命令查看如下: 在我未提交之前,我发现添加5555555555555内容有误,所以我得马上恢复 ...

  2. mzy git学习,撤销修改(二)

    git checkout – file: 撤销我们对工作区的修改(没有提交到暂存区) 当我们在工作区修改了之后,并没有提交到暂存区,如果要撤销对 某个文件的修改的话,就使用 git checkout ...

  3. 『现学现忘』Git基础 — 23、Git中的撤销操作

    目录 1.撤销操作说明 2.撤销工作区中文件的修改 3.撤销暂存区中文件的修改 4.总结 1.撤销操作说明 我们在使用Git版本管理时,往往需要撤销某些操作.比如说我们想将某个修改后的文件撤销到上一个 ...

  4. git查看日志

    git查看日志 git log -n 显示前N条记录 git log -3 退出log命令 直接输入: q git log --stat -n 显示提交的文件的简要的修改统计 $ git log -- ...

  5. Git查看、删除、重命名远程分支和tag【转】

    转自:http://zengrong.net/post/1746.htm 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也 ...

  6. git查看某个文件修改历史

    [git查看某个文件修改历史] 1.使用git命令 git whatchanged charge.lua 显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注(没有修改细节) git ...

  7. git命令--git checkout 之 撤销提交到暂存区的更改

    SYJ@WIN-95I6OG3AT1N /D/gitlab/ihr-kafka-produce (master) $ git status [由于工作区文件被修改了,所以显示为红色] On branc ...

  8. git 学习之撤销和删除

    在实际的工作和学习中我们经常的会对文件进行修改,但是或多或少的就会发现由于某些原因修改是错误的这时候就需要对所做的修改进行撤销,更或者某些时候需要对文件进行删除.本节就会告诉大家如何操作. 撤销操作 ...

  9. Git查看、删除远程分支和tag

    本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使 ...

随机推荐

  1. SPOJ Substrings

    题目链接:戳我 题目大意:给定一个字符串,它的长度n<=2e5.求长度1~n的子串出现的最大次数. 对于一个子串,它的出现次数是多少?就是它所在endpos集合的大小qwq(注意,这里的大小不指 ...

  2. TCP BBR - 一键开启脚本

    这是秋水逸冰提供的TCP BBR一键开启脚本,脚本详细说明地址: https://teddysun.com/489.html 按照说明操作就可以了,注意问题:这个脚本获取有的时候可能有问题,如果提示脚 ...

  3. 使用python进行短信轰炸

    本文作者:i春秋作家——Hacker1ee 大家好,我是1ee(因为在作家群,就不加Hacker这个前缀了,怕被大佬打..) 刚加入i春秋作家组希望大家多多关照,也欢迎大家找我交流 今天我来讲讲我最近 ...

  4. 使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之三(配置文件读取)

    干了一天的活,还有点时间,给兄弟们写点东西吧. 大家有没有发现一个问题?那就是在.Net Core的MVC项目里面,没有.config文件了!!!同志们,没有config文件了啊,这样搞,我以后要做些 ...

  5. JavaScript函数学习总结(一)---函数定义

    博客原文地址:Claiyre的个人博客 如需转载,请在文章开头注明原文地址 在许多传统的OO语言中,对象可以包含数据,还可拥有方法,也就是属于该对象的函数.但在JavaScript中,函数也被认为是一 ...

  6. Jmeter之Bean shell使用

    转载地址:http://www.cnblogs.com/puresoul/p/4915350.html 一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且 ...

  7. Alamofire源码导读三:返回的处理逻辑

     以DataRequest 为例子. 最简单的返回 URLSession 有一个方法,可以构建 URLSessionDataTask func dataTask(with url: URL, com ...

  8. 【LOJ 2542】【PKUWC2018】 随机游走(最值反演 + 树上期望dp)

    哇我太菜啦555555 不妨钦定我们需要访问的点集为$S$,在$S$已知的情况下,我们令$f(x) $表示从$x$走到点集$S$中任意一点的期望步数. 若$x∈S$,则显然$f(x)=0$,否则$f[ ...

  9. 堆排序(最大堆)的理解和实现(Java)

    堆的定义 堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆:或者每个节点的值都小于或等于其左右孩子的值,称为小顶堆.如下图举例: 通过堆的定义可知,根节点一定是对中 ...

  10. 平衡二叉树(AVL)的理解和实现(Java)

    AVL的定义 平衡二叉树:是一种特殊的二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1.从平衡二叉树的名字中可以看出来,它是一种高度平衡的二叉排序树.那么什么叫做高度平衡呢?意思就是要么它 ...