首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Git基本原理介绍

# 左边执行 $ git commit -m "1st commit" $ git cat-file -t 6e4a700 # 查看 commit 对象的类型 $ git cat-file -p 6e4a700...# 查看 commit 对象的内容 $ git cat-file -t 64d6ef5 # 查看 tree 对象的类型 $ git cat-file -p 64d6ef5 # 查看 tree...现在,我们已经基本理解了文件如何在工作区、暂存区以及代码仓库之间进行状态的跟踪和同步。在 Git 的操作中,文件的可能状态有哪些,以及如何进行状态切换的,我们这里一起总结一下!...$ git diff --cached $ git diff HEAD 图片 Git 如何添加远程仓库 如何将我们本地的仓库和远程服务器上面的仓库关联起来呢?...Git 本来就是代码的分发平台,无中心节点,即每个节点都是主节点,所以其存储的目录结构都是一直的。这样,不管哪一个节点的内容发生丢失或缺失的话,我们都可以通过其他节点来找到。

34630

精读《When You “Git” in Trouble- a Version Control Story》

本文主要通过一个实际的例子来描述,当项目(代码)仓库出现问题时如何使用 git 进行有效的维护,并分享一些 git 使用经验以及分析 git 的内部实现机制。...如果实际场景中发生了类似的问题,该如何使用 git 找回丢失的 commit 呢?...这种情况应该如何恢复 commit 数据呢? 这里可以执行 git fsck --full 命令,该命令会检查仓库的数据完整性,会显示所有未被其他对象引用的所有对象。...执行 git cat-file -p [hash-key] 可以查看已经存在的 object 对象内容; 执行 git cat-file -t [hash-key] 可以查看已经存在的 object 对象类型...4 总结 本文从一个实际问题即如何使用 git 维护丢失的 commit 入手,并给出相应的解决思路和方案,以及通过git 内部三种对象来分析其内部工作机制,希望能过解决读者们对 git 存在困惑的地方

17620
您找到你想要的搜索结果了吗?
是的
没有找到

洞悉技术的本质-Git内部原理探索

Git如何存储文件信息的? 当我们执行git add、git commit时,Git背后做了什么? Git分支的本质是什么?....git版本库内文件的理解 Git如何存储文件信息的 要知道Git如何存储信息,我们需要了解一下常见的Git对象Git就是通过这些对象存储文件信息的。...给我们剖析这些对象,它是就是cat-file,通过-t参数可以查看object的类型,通过-p参数我们可以查看object存储的具体内容。...test $ git cat-file -t fb12 tree 我们知道tree object存储了一条或多条树记录(tree entries),每条记录含有一个指向数据对象(blob)或子树对象...如果想了解Git Object对应的SHA-1值如何生成和如何复现并串联多个commit object形成一个提交历史链,可查看《Pro Git》的第十章第二小节或参看后面的参考资料。

74930

聊聊Git原理

objects目录 这个目录是用来存储Git对象的(包括tree对象、commit对象和blob对象),对于一个初始的Git仓库,objects目录下只有info和pack两个子目录,并没有常规文件。...$ git cat-file -t d670460b4b4aece5915caf5c68d12f560a9fe3e4 blob $ git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4...$ git cat-file -t 2b00dcae50af70bb5722033b3fe75281206c74da commit $ git cat-file -p 2b00dcae50af70bb5722033b3fe75281206c74da...tree对象可以理解为UNIX文件系统中的目录,保存了工作目录的tree对象和blob对象的信息。接下来我们再来看一下Git如何进行版本控制的。...HEAD 新建分支的时候,Git是怎么知道我们当前是在哪个分支的,Git又是如何实现分支切换的呢?答案就在HEAD这个文件中。

36350

git 原理初探

前言 2. git如何保存代码的 3. hash 算法 4. 暂存区 1....是如何保存代码的 ---- 一、git 在 add 时,会将文件的内容通过Hash SHA-1算法生成一个基于Hash值的键值对数据库 参考 git 中文书籍git对象章节: https://www.progit.cn...压缩后的数据 cat .git/objects/xx/xxxx 查看文件的原始内容,压缩前的数据: 语法格式: git cat-file -p 索引值前七位 cat: 可以理解查看 -p: pretty...漂亮的,理解为便于查看的 git cat-file -p 8d0e412 查看文件类型,执行以下命令返回 blob 代表是 blob对象 git cat-file -t 8d0e412 查看文件内容长度...(例如: 10) git cat-file -s 8d0e412 3. hash 算法 ---- hash算法: 将任意长度的内容通过算法生成固定长度的输出,也就是加密为固定长度的字符串 git 是一个基于

15810

Git Pro深入浅出(三)

七、自定义Git 前面已经阐述了Git基本的运作机制和使用方式,介绍了许多Git提供的工具来帮助你简单且有效地使用它。本部分将演示如何借助Git的一些重要的配置方法和钩子机制,来满足自定义的需求。...$ git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a blob # 数据对象 2.2 树对象 使用“数据对象”存储,其记住文件的每一个版本所对应的...索引文件包含了包文件的偏移信息,我们通过索引文件就可以快速定位任意一个指定对象。通过打包对象可以减少大约 ⅔ 的磁盘占用空间。 **Git如何做到这点的?...**Git打包对象时,会查找命名及大小相近的文件,并只保存文件不同版本之间的差异内容。你可以查看包文件,观察它是如何节省空间的。...如果这些事情已经发生,该如何找回你的提交呢?

84461

用了5年的Git,你竟然还不晓得它的实现原理!

我发现学习Git内部是如何工作的以及Git的内部数据结构这部分内容,对于理解Git的用途和强大至关重要。若你理解了Git的思想和基本工作原理,用起来就会知其所以然,游刃有余。...这是Git系列的第一篇,主要会介绍Git的特点以及内部数据结构设计,和完成一次完整提交流程的时候数据是如何变化的。 Git有什么特点?...为cat-file指定-p选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容: $ git cat-file -p 8d0e $ hello gitcat-file指定-t选项可以查看文件的类型...$ git cat-file -t 88bc $ tree $ git cat-file -p 88bc $ 100644 blob 8d0e41234f24b6da002d962a26c2495ea16a425f...这样当完成一次提交的时候,整个状态的对应关系也是确定的,所以说commit对象就是当前系统的snapshot。 再来回顾下一次完整的提交流程: 如何写好注释,让同事赞不绝口?

22920

Git内部存储原理

查看Git Object存储内容 通过 git cat-file命令可以查看Git Object中存储的内容及对象类型,命令参数为Git Object的SHA-1哈希值,即目录名+文件名。...分别查看该blob对象和tree对象,其内容如下: $ git cat-file -p 065bca my project $ git cat-file -p 824244 100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad...$ git cat-file -p 3b18e51 hello world 从上面的实验我们可以得知,git中存储了三种类型的对象,commit,tree和blob。...Git如何实现Stash的呢?理解了Commit, Tree, Blog这三种Git存储对象,我们就可以很容易理解Git Stash的实现原理。...Git reset 实现原理 在进行一些改动以后并通过git commit 将改动的代码提交到本地的repo后,如果你测试发现刚才的改动不合理,希望回退刚才的改动,应该如何处理?

68730

Git 和 GitHub:从入门到实践1 Git 和 GitHub 基础简介

cat-file -t 命令来查看对象文件的类型。...查看 blob 对象的类型和内容 caozhi@ objects$ git cat-file -t 6d1f98e1a9bede453ab16d6ba90428a994ebf147 blob caozhi...caozhi@ objects$ git cat-file -t d4eec9c19502086dd0f42f8bb7f26feb77377d5c blob caozhi@ objects$ git cat-file...因此很难让 Git 执行任何不可逆的操作,或者让它以任何方式清除数据。同其它版本控制系统一样,没有提交的更新有可能出现丢失的情况,但是一旦我们将更改提交到 Git 中之后,就很难再丢失数据。...这个特性使得我们可以放心且愉悦地使用 Git,我们可以尽情地做任何尝试。即使误操作出现数据丢失,我们也可以通过各种手段将其进行快速恢复。

75640

7.13 Git 工具 - 替换

替换 Git 对象是不可改变的,但它提供一种有趣的方式来用其他对象假装替换数据库中的 Git 对象。...replace 命令可以让你在 Git 中指定一个对象并可以声称“每次你遇到这个 Git 对象时,假装它是其他的东西”。 在你用一个不同的提交替换历史中的一个提交时,这会非常有用。...首先获取一个已经存在的仓库,并将其分成两个仓库,一个是最近的仓库,一个是历史版本的仓库,然后我们将看到如何在不更改仓库 SHA 值的情况下通过 replace 命令来合并他们。...我们已经用基础提交重写了最近的历史,基础提交包括如何重新组成整个历史的说明。 我们可以将新历史推送到新项目中,当其他人克隆这个仓库时,他们仅能看到最近两次提交以及一个包含上述说明的基础提交。...即使你运行了 cat-file 命令,它仍会显示你替换的数据: $ git cat-file -p 81a708d tree 7bc544cf438903b65ca9104a1e30345eee6c083d

41320

Git基本概念及操作(3)

那么在GIT中是如何实现这些关联呢?GIT中同样有分支、版本概念。但是没有Configspec概念。tag概念同LABEL概念类似。当然这些概念都同GIT中是如何管理文件版本相关的。...首先我们来看GIT如何将文件对象化管理的,前面我们说GIT同其它版本管理系统不一样是GIT每个版本都不是保存变更,而是全保存。...readme [root@wrlinux3 mygit]# git cat-file -t 52c8 blob [root@wrlinux3 mygit]# git cat-file...-t f8b6 blob [root@wrlinux3 mygit]# git cat-file -t d224 blob 2)tree 是一个simple 对象,它的内容就是一个指针表...从这张图我们也就明白了前面所说了Commit对象作为GIT管理的核心。GIT的Commit对象它不是说针对单个文件,它是针对的整个项目的。另外还有一种对象,TAG对象

80110

您有一篇git 原理,请注意查收

使用git cat-file命令 带有-t选项查看类型(type) 带有-s选项查看大小(size) 带有-p选项查看内容(pretty-print) 这个选项用于显示 Git 对象的内容,以更易读的方式呈现...,通常用于查看提交、树或标签对象的内容 git cat-file -t c3dc8e6cf3e1117a8d9731ddde9916da644296aa blob git cat-file -s c3dc8e6cf3e1117a8d9731ddde9916da644296aa...cat-file -t refs/heads/master ❞ 看起来这是一种新的对象类型,似乎是一个「提交对象」(commit object)。...❝树对象内部使用更多的树对象来表示文件夹,这些树对象与提交对象相连,用于表示目录结构。 ❞ ---- 5. 新增修改 让我们对文件进行更改并查看它是如何工作的。...cat-file -p 1f9224976e282aa9e32398a5bca0cec08041f1dc git,hello,789 提交对象现在有一个额外的属性,名为parent,它链接到「前一个提交

24730

Git目录为什么这么大

的目录过大,从git进行版本控制底层存储出发,简要分析Git目录过大的原因,以及如何处理 2、Git存储原理 2.1 目录结构 使用版本控制的人都会知道,不管是svn还是更为流行的git,整个工程目录下...cat-file命令查看Git Object中存储的内容及对象类型,命令参数为Git Object的SHA-1哈希值,即目录名+文件名。...,commit对象中保存了commit的作者,commit的描述信息,签名信息以及该commit中包含哪些tree对象和blob对象,继续看该tree对象中的内容 # git cat-file -p d2df53...demo1.txt # git cat-file -p 3b18e5 hello world 因此可以得知,git中存储了三种类型的对象,commit,tree和blob,三者分别对应git commit...,此commit中的目录和文件,这些对象之间的关系如下图 4、处理大文件 4.1 大文件的产生 由上面的详细分析流程可以看出,git会为每一个提交到版本控制的文件进行追踪,那么大文件究竟如何产生呢?

1.2K10

救命的时候绝对用的上——每天三分钟玩转Git (8)

下面我们分两种代码丢失的场景情况来讨论。...在上面执行完git fsck --lost-found命令,返回的第一行blob我们使用git show命令来看看他的内容 正好内容就是lose_file.txt原本的内容,就是我们丢失的文件内容,这样就找回来了...我们再来看看上图中的commit和commit下的tree内容,可以看到他们之间的层级关系如下: 用git cat-file -p可以看到commit的内容,可以选择把这个commit合并到我们的分支里...git cat-file -t 7f5965523d2b9e850b39eb46e8e0f7c5755f6719 就能看见文件类型 把最后一个/去掉 复制从objects/ 后面的所有东西放在-t后面...提交过的就用命令git reflog来查询提交记录找回 2. 未提交但是git add过的就用git fsck --lost-found来生成丢失文件记录来找回。 3.

78020
领券