在初次提交时重置索引后清除git/objects下的blobs,可以按照以下步骤进行操作:
请注意,这些操作将会清除所有未提交的更改和未跟踪的文件,因此请确保在执行之前进行备份。此外,这些操作是不可逆的,一旦执行将无法恢复。
图片objects目录之所以这么大,是因为它保存了仓库中的所有历史版本和数据对象,也就是blobs文件内容, trees目录结构, commits提交历史,它们是 Git 中的三个核心对象类型。...其中:Blobs: 每一个文件都被视为一个二进制对象(Blob 对象),它保存了文件的所有内容和一些元数据信息,如文件名、文件类型、文件大小等。...Git 库中的历史版本、清除废弃的、过期的对象,这个过程会耗费较长的时间。...那么操作起来就得小心一点了,毕竟2000star,别把仓库弄嘎了,既要清除一个分支上的所有提交记录,同时又不能删除这个分支本身,其实我们可以迂回一下。...# git branch -D git branch -m git push -f origin 在推完代码后我再次去看了下仓库的大小
每一个提交Commit相当于一个Patch应用在之前的项目上,借此一个项目可以回到任何一次提交时的文件状态 于是在Git中删除一个文件时,Git只是记录了该删除操作,该记录作为一个Patch存储在...Git往磁盘保存对象时默认使用的格式叫松散对象loose object格式,当你对同一个文件修改哪怕一行,git都会使用全新的文件存储这个修改了的文件,放在了objects中。...该命令可以指定只显示某个引用(或分支)的上下游的提交 --objects 列出该提交涉及的所有文件ID --all 所有分支的提交,相当于指定了位于/refs下的所有引用 verify-pack...--force --all 本地的repo里面仍然保留了这些objects, 等待GC垃圾回收,因此需要彻底清除并收回空间 # rm -rf .git/refs/original/ # git reflog...--index-filter 'git rm -r --cached --ignore-unmatch .git/objects/pack/xxxxx.pack' --prune-empty # 删除和重建的索引
Git目录 ‘Git目录’是为你的项目存储所有历史和元信息的目录–包括所有的对象(commits,trees,blobs,tags) 这些对象指向不同的分支。...- logs/ # 各个refs的历史信息 |-- objects/ # Git本地仓库的所有对象 (commits, trees, blobs, tags) `-- refs/...# 标识你项目里的每个分支指向了哪个提交(commit)。...当你在项目的不同的分支间切换时,工作 目录里的文件经常会被替换和删除。...所有历史信息都保存在’Git目录’中;工作目录只用来临时保存签出(checkout) 文件的地方,你可以编辑工作目录的文件直到下次提交(commit)为止。
5、提交修改。 6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。 Git 的工作流程图: Git 工作区、暂存区和版本库 基本概念 工作区:就是你在电脑里能看到的目录。...一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。...图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。...当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。 Git 的工作流程示意图: image.png git的工作区、暂存区和版本库 基本概念: 工作区:就是你在电脑里能看到的目录。...一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 ...图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。 ...当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。 ...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
BFG Repo-Cleaner(快速清除Git提交历史中的特定文件) 有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),而且上传的文件又特别大的时候...现在你可以运行BFG来清理你的仓库: $ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git BFG将更新您的提交以及所有分支和标记...当从Mercurial等其他源代码控制系统迁移到Git时,这些常常会成为一个问题: $ bfg --delete-folders .git --delete-files .git --no-blob-protection...默认情况下,HEAD分支是受保护的,虽然它的历史记录将被清除,但是最新的提交(这个'技巧')是protected commit(受保护的提交),它的文件层次结构将不会被改变。...如果某个坏的文件(比如10MB的文件,当您指定--strip-blobs-bigger-than 5M)在受保护的提交中,那么它不会被删除—它将保存在您的存储库中,即使BFG从以前的提交中删除了它。
安装 bfg 传统方式安装(不推荐) 下载安装 Java 运行时 下载安装 bfg.jar 这里并不推荐使用传统方式安装,因为传统方式安装后,bfg 不会成为你计算机的命令。...可能需要解除保护 如果本文后面的命令你遇到了受保护的提交,那么需要在所有命令的后面加上 --no-blob-protection 参数 常见用法 使用 bfg 来清理仓库比 git 原生的 git-filter-branch...就是回收已经没有引用的旧提交,这可以减小本地仓库的大小: 1 > git reflog expire --expire=now --all && git gc --prune=now --aggressive...--private 仅将本次操作视为个人数据的修改(这样生成的新提交会使用旧提交的 Id,其他人拉取仓库的时候因为这些 Id 已经存在于是不会更新,以至于此更改实际上只影响自己...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
# 把文件从缓存区提交至仓库 git commit -m "提交描述" 提交描述规范 在提交代码时输入清晰的说明有利于版本管理,建议搭配如下关键字编写提交描述 # 新建(add) # 删除(rm)...版本管理 提交修改 如修改test.txt的内容后,运行git status命令看看被修改的文件,然后再使用git add test.txt、 git commit -m "修改描述"把修改后的文件提交到仓库...,提交后可再次使用git status查看当前状态。...如创建仓库时勾选了 Initialize this repository with a README 则需先拉取README.md文件到本地仓库git pull 可关联多个远程仓库,注意给不同的远程仓库取不一样的名称...将文件内容添加到索引中 mv 移动或重命名文件、目录或符号链接 reset 将当前磁头重置为指定状态 rm 从工作树和索引中删除文件
【推荐】基于索引值操作 $ git reset --hard [局部索引值] # 2....后工作区修改的内容)。...常见场景操作 场景1:工作区某文件内容改错,想直接丢弃工作区的修改时: $ git checkout -- [file name] 场景2.1:改错的文件添加到了暂存区,未提交版本库,想清除暂存区的修改...场景3.1:改错的文件已提交版本库,但未提交远程库,想撤销上次提交,重新放回工作区时: $ git reset HEAD^ 场景3.2:改错的文件已提交版本库,但未提交远程库,想撤销上次提交,上次提交内容直接丢弃时...: $ git reset --hard HEAD^ 场景4:工作区删除文件,想找回时: 注意:工作区 rm 文件后需要执行 git rm [file name] 删除对应的追踪并 commit # 前提
: # 创建一个版本库 git init # 每次修改好了后,可以先将修改存入stage(快照/索引)中 git add # 修改了大量文件则使用下面这个命令批量存入...# 使用commit将快照/索引中的内容提交到版本库中 git commit -m"msg" # 也可以将git add与git commit用一个指令完成 git commit -a-m"msg"...进行重置: git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息 git reset...如果还要提交,直接commit即可 git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容 HEAD 最近一个提交 HEAD^ 上一次 ...可以用git log 看到,也可以在页面上commit标签页里找到. git/github初级运用自如 git/github学习笔记 总结自己的Git常用命令 学一点Git--20分钟git快速上手 如何在
基本概念 了解工作区,暂存区和版本库的区别和联系有助于我们更好理解 git 的工作流程,了解命令的操作意图. git 和其他版本控制系统如 svn 的不同之处就是有暂存区的概念....暂存区 | Stage 工作区下的隐藏.git目录下的.index文件,因此也称为索引. 版本库 | Repository 工作区下的隐藏目录.git目录 ?...意图说明 git add 添加文件 工作区的修改或者新增的文件执行git add 命令后,暂存区(index)的目录树会自动更新,同时引发这次变化的文件内容会被记录下来,即生成对象库(objects)中的新对象...,而对象的 id会被记录到暂存区的文件索引(index)中. git commit 提交文件 暂存区的目录树写入到对象库(objects),master 分支的目录树自动更新. git reset HEAD...检出文件 HEAD 指针指向的 master 分支中的文件替换暂存区以及工作区文件,注意:不仅清除工作区未提交的改动,连暂存区未提交的改动也会被清除!
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。 image.png git的工作区、暂存区和版本库 基本概念: 工作区:就是你在电脑里能看到的目录。...一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 ...图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。 ...当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。 ...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
git clean 清除工作区未跟踪文件 git clone 克隆版本库 git commit 提交 git config 查询和修改配置 git describe 通过里程碑直观地显示提交ID git...校验 GPG 签名的Tag 4、版本库管理相关命令 命令 简要说明 git count-objects 显示松散对象的数量和磁盘占用 git filter-branch 版本库重构 git fsck...对象库完整性检查 git fsck-objects* 同义词,等同于 git fsck git gc 版本库存储优化 git index-pack 从打包文件创建对应的索引文件 git lost-found...为本地版本库中相同的对象建立硬连接 git repack 将版本库未打包的松散对象打包 git show-index 读取包的索引文件,显示打包文件中的内容 git unpack-objects 从打包文件释放文件...git receive-pack 执行 git push 命令时在远程执行的命令,用于接受推送的数据 git send-pack 执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据
add 文件名 添加到暂存区(索引区) git commit -m “日志信息” 文件名 提交到本地库 git reflog 查看历史记录 git reset –hard 版本号 版本切换... :比较两个分支上最后 commit 的内容的差别 同样提交修改后的文件 $ git add hello.txt $ git commit -m "修改提交" [master...此处的 67b42c5 和 9bdf471 即为版本号 版本切换 将版本切换到初次提交时的版本 $ git reset --hard 9bdf471 HEAD is now at 9bdf471...结合上面那张图,可以看到推送操作需要先将本地仓库添加到索引区,然后再提交到本地库,最后才能进行推送操作。 示例: $ git add ....解决方法: 使用个人令牌登录; 在密码栏输入个人令牌即可 问题三: git push时提示: Everything up-to-date 原因:修改本地仓库时未进行提交 解决方法:添加本地仓库并提交
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。...当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。...或者 "git checkout -- " 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。...我们如何将我们的git 库关联到github上呢?下面是两种情况下的关联方法。
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。...或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。 当执行 git checkout HEAD ....这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。...目录,都会变成Untrack状态; 没有add过的文件或者被restore(不带--staged)的文件,处于Untrack状态; 初次add和被add后产生修改的文件,会处于modifed状态。...(3)索引指向的是.Git/objects下的文件。 (4)暂存区的作用:除非是绕过暂存区直接提交,否则Git想把修改提交上去,就必须将修改存入暂存区最后才能commit。
实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件做快照,然后保存一个指向这次快照的索引。...Tree: 这相当于一个目录,记录着目录树内容及其中各个文件对应 blob 对象索引。 Blobs: 这是文件的内容,用于表示文件快照内容。...在第一眼看到这么多两位字符的文件夹名时完全不知道这些是啥。那么我们就需要转头来解释一下 Git 的数据存储结构 了。...当 Git 存储对象(也就是我们提交的记录)时,它不会将它们全部转储到一个目录中,因为这样会使得目录在不断的迭代提交后变得笨拙,所以它会将它们整齐地构造成一棵树—— Git 将对象哈希的前 2 个字符用作目录名称...在若干次提交后,你其实已经有了一个指向最后一次提交对象的 Master 分支,它在每次提交的时候都会自动向前移动。 当我们创建一个新的分支时,其实就是在当前 Commit 对象上新建一个分支指针。
一般存放在 “.git 目录下” 下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录。...图中的objects标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。...或者 "git checkout -- " 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。 基本常用命令 第一次使用 git 的时候,需要设置用户信息和用户邮箱,用于辨识提交者身份。...当某一次提交后,突然想起漏提交了文件,或不小心提交了不满意的代码时, 可以使用git commit --amend -m "message"指令。
$ find .git/ -type d # 查看.git/下的所有目录 .git/ .git/hooks .git/info .git/objects .git/objects/info .git/...$ find .git/objects/ -type f # 查看.git/objects下的所有文件 我们发现这个目录下是空的,可以通过底层命令 git hash-object 将任意数据保存于.git...当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件索引中。...当执行 git checkout 或者git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动。 !! 了解了git的底层原理那么在使用git时就会更加顺手,把他当成一个服务于你的工具。
git命令如下 低层命令 git对象 git hash-object -w fileUrl : 生成一个key(hash值):val(压缩后的文件内容)键值对存到.git/objects tree...treehash : 生成一个提交对象存到.git/objects 对以上对象的查询 git cat-file -p hash : 拿对应对象的内容 git cat-file...HEAD: 是一个指针 它默认指向master分支 切换分支时其实就是让HEAD指向不同的分支 每次有新的提交时 HEAD都会带着当前指向的分支 一起往前移动 git log --oneline...: git branch --no-merged 一旦出现在这个列表中 就应该观察一下是否需要合并 git分支的注意点 在切换的时候 一定要保证当前分支是干净的!!!...第一步是重置HEAD内容 我们知道HEAD本质指向一个分支 分支的本质是一个提交对象 提交对象 指向一个树对象 树对象又很有可能指向多个git对象 一个git对象代表一个文件!!!
领取专属 10元无门槛券
手把手带您无忧上云