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

如何在filter-branch --subdirectory-filter之后从我的repo中删除不需要的对象

在使用 filter-branch --subdirectory-filter 命令后,如果需要从仓库中删除不需要的对象,可以使用以下步骤:

  1. 首先,执行以下命令以获取需要删除的对象列表:
代码语言:txt
复制
git log --all --format="%H" | grep -v $(git log --format="%H" --branches --tags)
  1. 将需要删除的对象列表保存到一个文件中,例如 objects-to-delete.txt
  2. 使用以下命令删除不需要的对象:
代码语言:txt
复制
git filter-repo --subdirectory-filter <path-to-subdirectory> --invert-paths --pathspec-from-file=objects-to-delete.txt

其中,<path-to-subdirectory> 是需要保留的子目录的路径。

  1. 最后,使用以下命令删除不需要的分支和标签:
代码语言:txt
复制
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

这将删除所有原始分支和标签。

需要注意的是,这些命令可能会导致仓库历史记录的丢失,因此在执行前请确保备份所有需要保留的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

仓库移除敏感信息

如果你将敏感数据(密码或 SSH 密钥)提交到 Git 仓库,你能够将其历史记录删除。...要从仓库历史记录完全删除不需要文件,你可以使用 git filter-branch命令或 BFG Repo-Cleaner。...我们建议在从仓库删除文件之前合并或关闭所有打开请求。 你可以使用 git rm 最新提交删除文件。...仓库历史清除文件 使用 BFG BFG Repo-Cleaner 和 git filter-branch 类似,用于删除不需要文件,是一种更快速、更简单替代方法。...为了说明 git filter-branch 如何工作,我们将向你展示如何仓库历史记录删除具有敏感数据文件,并将其添加到 .gitignore 以确保它不会被意外重新提交。 1.

92520

Github技巧 – 删除敏感文件、批量修改提交

最近终于是快忙完面向对象课设,前前后后写了2w+行,也勉强算个完整项目了。不过由于项目原先部署在私有Gogs,后来又移到Github私有仓库,导致没有在意配置文件。...最近打算整理整理开源时候发现,近100 commits里全是那配置文件。其实以前也干过这事,当时是biliapi-python开源,在测试用例包含了账号信息。...当时一顿骚操作,然后成功把所有commit弄没了。 这次学乖了,跑去看了眼文档,发现一个非常好用指令git filter-branch。...比如删除passwords.txt文件,可以运行: $ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd...首先单独clone下repo之后cd进来git filter-branch之后检查git log会发现hash和日期都变了,虽然hash没办法,不过日期问题不用担心,push后是正确

79110

Git目录为什么这么大

HEAD:表示当前本地签出分支 hooks:git钩子目录,关于钩子使用可以参考之前文章 利用Git钩子实现代码发布 index: 存储缓冲区GitExtensionsstage...内容 objects:存储对象目录,git对象分为commit对象,tree对象(多叉树),blob对象 refs:存储指向branch最近一次commit对象指针,也就是commit...于是在Git删除一个文件时,Git只是记录了该删除操作,该记录作为一个Patch存储在 .git 。...我们在提交前移除了 test.py 文件, 这个文件便Git所有记录完全消失了 3、解析Object存储方式 为了一步步熟悉Object存储方式,这里在本地创建一个空git仓库,且objects...,commit对象中保存了commit作者,commit描述信息,签名信息以及该commit包含哪些tree对象和blob对象,继续看该tree对象内容 # git cat-file -p d2df53

1.2K10

Git修改已提交commit1 本地修改

请往下继续阅读 1.3 重排或删除某些提交 变基命令非常强大,还可以将提交历史重新手动排序或者删除某次提交。...1.5 分离某次提交 变基命令还能分离提交,这里不描述,详情查看后面的参考链接 终极手段 git还提供了修改版本历史“大杀器”——filter-branch,可以对整个版本历史每次提交进行修改,可用于删除误操作提交密码等敏感信息...删除所有提交某个文件 git filter-branch --treefilter 'rm -f password.txt' HEAD 将新建主目录作为所有提交根目录 git filter-branch...--subdirectory-filter trunk HEAD 本地回退 回退操作也是对过往提交一剂“后悔药”,常用回退方式有三种:checkout、reset和revert checkout...回退到指定提交以后提交都会提交日志上消失 注意:工作区和暂存区内容都会被重置到指定提交时候,如果不加--hard则只移动HEAD指针,不影响工作区和暂存区内容。

2K30

防止 Git 泄漏 5 种最佳做法

这些做法导致 Git 仓库信息遭到泄露。每天都有数千个新 API 或加密密钥 GitHub 泄漏出去。[2] 在信息安全领域工作了三年。...gitleaks[8] 提供了另一种在 git 仓库查找未加密密钥和其他一些不需要数据类型方法。我们可以将其集成到自动化工作流程,例如 CICD。...我们需要做整个 Git 历史记录删除所有敏感数据。 在进行任何清理之前请记得进行备份,然后在确认一切正常后再删除备份文件。...git clone --mirror git://example.com/need-clean-repo.git 我们需要执行 git filter-branch 命令来所有分支删除数据并提交历史记录...通常比 git filter-branch 快 10–720 倍。除删除文件外,BFG 还可以用于替换文件机密信息。 BFG 保留最新提交记录。它是用来防止我们犯错误

1.8K10

10.7 Git 内部原理 - 维护与数据恢复

它会你必须修改或移除一个大文件引用最早对象开始重写每一次提交。...为了演示,我们将添加一个大文件到测试仓库,并在下一次提交删除它,现在我们需要找到它,并将它从仓库永久删除。...branches -- git.tgz dadf725 oops - removed large tarball 7b30847 add git tarball 现在,你必须重写 7b30847 提交之后所有提交来...最后,使用 filter-branch 选项来重写自 7b30847 提交以来历史,也就是这个问题产生地方。 否则,这个命令会最旧提交开始,这将会花费许多不必要时间。...可以 size 值看出,这个大文件还在你松散对象,并没有消失;但是它不会在推送或接下来克隆中出现,这才是最重要

80220

Git 维护及数据恢复

为了移除对一个大文件引用,最早包含该引用 tree 对象开始之后所有 commit 对象都会被重写。...为了演示这点,往 test 仓库中加入一个大文件,然后在下次提交时将它删除,接着找到并将这个文件仓库永久删除。...而在这次提交之前仅用了 2K 左右 ── 显然在这次提交时删除文件并没有真正将其历史记录删除。...不过 reflog 以及运行 filter-branch 时 Git 往 .git/refs/original 添加一些 refs 仍有对它引用,因此需要将这些引用删除并对仓库进行 repack... size 值可以看出大文件对象还在松散对象,其实并没有消失,不过这没有关系,重要是在再进行推送或复制,这个对象不会再传送出去。

55720

Git GC命令清理Git暂存区

为了移除对一个大文件引用,最早包含该引用 tree 对象开始之后所有 commit 对象都会被重写。...为了演示这点,往 test 仓库中加入一个大文件,然后在下次提交时将它删除,接着找到并将这个文件仓库永久删除。...而在这次提交之前仅用了 2K 左右 ── 显然在这次提交时删除文件并没有真正将其历史记录删除。...不过 reflog 以及运行 filter-branch 时 Git 往 .git/refs/original 添加一些 refs 仍有对它引用,因此需要将这些引用删除并对仓库进行 repack... size 值可以看出大文件对象还在松散对象,其实并没有消失,不过这没有关系,重要是在再进行推送或复制,这个对象不会再传送出去。

6.5K20

7.6 Git 工具 - 重写历史

核武器级选项:filter-branch 有另一个历史改写选项,如果想要通过脚本方式改写大量提交的话可以使用它 - 例如,全局修改你邮箱地址或每一个提交移除一个文件。...你将会学习到几个常用用途,这样就得到了它适合使用地方想法。 每一个提交移除一个文件 这经常发生。 有人粗心地通过 git add . 提交了一个巨大二进制文件,你想要从所有地方删除它。...为了整个提交历史移除一个叫做 passwords.txt 文件,可以使用 --tree-filter 选项给 filter-branch: $ git filter-branch --tree-filter...在本例,你每一个快照移除了一个叫作 passwords.txt 文件,无论它是否存在。...如果想要让 trunk 子目录作为每一个提交项目根目录,filter-branch 也可以帮助你那么做: $ git filter-branch --subdirectory-filter trunk

66160

如何删除Git仓库敏感文件及其历史记录

本文主要介绍如何使用 git filter-branch 命令删除 Git 仓库敏感文件及其历史记录。...在 Git ,我们通常会将敏感信息(密码、私钥等)存储在 .gitignore 文件,以防止这些信息被意外提交到仓库。...背景 因为开一个新项目的时候习惯先使用私有仓库,当完善差不多时候再转为公开,私有库就随便了些,可能存在一些不合适公开一些信息,所以需要在转为公开仓库前检查删除一些内容。...2.3 运行git filter-branch 进入仓库目录,使用 git filter-branch 命令删除敏感文件及其历史记录。...结论 本文介绍了如何使用 git filter-branch 命令手动删除Git仓库敏感文件及其历史记录。虽然这种方法需要一些手动操作,但它不需要安装任何第三方工具。

27240

如何删除GIT仓库敏感信息

这里将演示一个故意写满“敏感信息”Github仓库,然后一步一步演示怎么在历史记录删除“敏感信息”,以完成“脱敏”。...文件夹敏感 删除 Program.exe 大二进制 删除 这个演示满载“敏感”信息代码仓库,可以:https://github.com/sdcb/sensitive-repo-demo 这里下载...如何删除敏感信息 2.1 前置条件 必须先切换到主分支(一般为master),然后获取最新代码再进行操作: git checkout master git pull 如果有任何修改对象,都会阻止提交,...(这里为AWS相关key),右边为替换之后值。...3.6 关于--no-blob-protection --no-blob-protection是指将历史删除记录,放到最新一次未签入修改: PS C:\Users\sdfly\Desktop\sensitive-repo-demo

3K61

Git 仓库瘦身与 LFS 大文件存储

熟悉 Git 小伙伴应该都知道随着 Git 仓库维护时间越来越久,追踪文件越来越多,git 存储 objects 数量会极其庞大,每次远程仓库 git clone 时候都会墨迹很久。...就算知道了是哪里个文件造成,我们直接删除那个文件是没有用,我们还需要删除那个文件对应 Git Object 文件。...grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" 然后我们删除历史提交过大文件...bigfile,日志我们可以看到本地仓库已经移除大文件成功了 ➜ git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch...master -> master 开启了 LFS 之后,对应大文件内容存储在 LFS 服务器,不再是存储在 Git 仓库,Git 仓库存储是大文件指针文件,LFS 指针文件是一个文本文件

60940

Git 中文参考(六)

笔记 git gc 非常努力地不删除存储库任何位置引用对象。...然后有两种方法可以获得更小存储库。更安全方法是克隆,保持原始原封不动。 用git clone file:///path/to/repo克隆它。克隆将没有删除对象。...笔记 git-filter-branch 允许您对 Git 历史记录进行复杂 shell 脚本重写,但如果您只是 _ 删除不需要数据 _(大文件或密码),则可能不需要这种灵活性。...--remote= 而不是本地存储库创建 tar 存档,远程存储库检索 tar 存档。请注意,远程存储库可能会限制<tree-ish>中允许哪些 sha1 表达式。...$ git tag -f lastR2bundle master 然后将 file.bundle 传输到目标机器 B.由于此捆绑包不需要提取任何现有对象,因此可以通过克隆机器 B 上创建新存储库:

19010

9G到0.3G,腾讯会议对他们git库做了什么?

特殊分支处理 说明:以上历史记录裁剪并删除历史提交记录执行完后,对于基于截断提交节点前提交节点创建出来分支或者其子分支会出现文件被删除或者整个分支被删除情况。...7ffe6782272879056ca9618f1d85a5f9716f8e90" ] then echo else echo "$parent" fi' --tag-name-filter cat -- --all 第3步删除截断节点前提交记录...一般公司自己代码管理平台都会提供设置单个 git 文件上传大小上限功能,得管理员才有权限设置;腾讯代码管理平台是像下图这样设置: 解释:之后步骤将会把新老仓库互换,新旧仓库互换后,其它机器本地老仓库分支还是有...0git config --global https.lowSpeedTime 999999 仍然无法解决,可能是用户客户端默认有设默认值限制 git 传输包大小,可执行指令: git config...包,然后就可以在 python 代码作为库使用:import git_filter_repo as fr。

87651

Git工作流协作一些经验,分支、合并、提交,推送,移除历史

在实际使用还是用图形软件 sourcetree为主,不过图形软件只是为了方便,并且有很多用法还是要实用命令行来解决,所以要先理解概念,再熟悉命令,最后使用工具。...当没有足够认可成为维护开发者,或者只是希望做一些定制化开发留为己用时候呢,可以使用GitHubfork功能。 这里设计了一张图来诠释fork时,repo之间关系。...在fork之后,实际上我们不必把自己仓库当成是树枝,当我们创建完分支后,两个仓库已经是对等了。我们可以向源仓库推送更新,也可以把源仓库更新当做推送方,合并到自己仓库。...在github,两个仓库之间拉取是很简单,无论是希望推送,还是希望源仓库更新都适用这个拉取。 如果是希望更新就将两个仓库顺序对转然后进行对比。 之后就根据需要进行合并操作就可以了。...---- 移除所有记录文件 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch THE_FILE_PATH

55120

Git+Gerrit如何永久删除历史文件(大文件私密文件)

git reset --soft命令一样是无法将提交记录仓库抹掉,虽然通过reset之后,大文件提交记录在git log已经查找不到,但实际上,这个记录并不会真正仓库删除,只要能找到commit...id,依然可以仓库恢复该提交历史。...git filter-branch 1)前面两种修改方式都是我们平时所熟悉,使用频率比较高删除某些文件或者提交记录方式,但这些方式实际上都是生成了新提交记录,并不会修改或者删除我们提交历史...,也就是说,想要永久删除仓库某个文件,这样是行不通。...Git这么强大,肯定是存在可以永久删除历史记录命令,找了一圈,发现确实有“后悔药”命令,那就是git filter-branch,通过以下命令,就可以永久删除你想要删除任何文件: git filter-branch

2.5K20

测试开发必会12个Git高级命令

将cherry-pick远程提交合并到自己分支 更有甚者,如果只想将远程仓库一个特定提交合并到自己分支该怎么做呢?...将子目录分隔为新仓库 有时,你可能需要将Git仓库某个特定目录转换为一个全新仓库。...这可以通过git filter-branch来实现: $ git filter-branch --prune-empty --subdirectory-filter master Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6...虽然之前所有文件都会被删除,但他们依旧存在于Git历史。现在可以将新本地仓库推送到远程了。 10....轻松做法则是自动tar文件中排除掉.git目录: $ tar cJf .tar.xz / --exclude-vcs 12. 查找修改者 最后,如果出现混乱情况,你一定想要找出是谁造成

85920
领券