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

Git filter-branch:可以更新提交消息以引用旧的提交ID吗?

Git filter-branch 是一种 Git 命令,用于对 Git 仓库的历史记录进行清理和修改。它可以用来删除或修改提交历史记录中的某些提交,从而更新提交消息以引用旧的提交 ID。

具体来说,Git filter-branch 命令可以使用 --tree-filter 选项来指定要清理或修改的提交,例如:

代码语言:txt
复制
git filter-branch --tree-filter 'git rm --cached -r .gitignore'

这个命令将删除所有 .gitignore 文件,因为这些文件会被 Git 跟踪并保存在仓库中,导致仓库变得非常大。

除了 --tree-filter 选项之外,Git filter-branch 命令还可以使用 --commit-filter 选项来指定要清理或修改的提交,例如:

代码语言:txt
复制
git filter-branch --commit-filter 'git update-index --assume-unchanged src/components/core-layout/core-layout.ts'

这个命令将忽略所有提交,但不会删除它们,因为这些提交已经被修改并保存在仓库中,但可能还没有被使用。

总的来说,Git filter-branch 命令是一种非常有用的工具,可以帮助你清理和修改 Git 仓库的历史记录,从而更好地管理你的代码库。

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

相关·内容

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

id,依然可以从仓库中恢复该提交历史。...git filter-branch 1)前面两种修改方式都是我们平时所熟悉,使用频率比较高删除某些文件或者提交记录方式,但这些方式实际上都是生成了新提交记录,并不会修改或者删除我们提交历史...Git这么强大,肯定是存在可以永久删除历史记录命令,找了一圈,发现确实有“后悔药”命令,那就是git filter-branch,通过以下命令,就可以永久删除你想要删除任何文件: git filter-branch...不是说好了,可以永久删除记录?摔!不是说好了,不能再通过commit id找回原来大文件了吗?摔!别急,接下来就告诉你为什么。...那么接下来只要把本地记录,强制更新到远程仓库就行了。 强制更新是一个非常危险动作,一定要确保你本地内容是最新,已经没有人在你之后提交了代码,否则会将其它的人提交代码也一并删除了。

2.6K20

Git 中文参考(六)

导入之后,在其 ref 更新阶段,快速导入测试每个现有分支 ref 验证更新将是快进更新(存储在 ref 中提交包含在要写入提交新历史中)。...data 提供原始数据(用作 blob /文件内容,提交消息或带注释标记消息快速导入。可以使用精确字节计数提供数据,也可以使用终止线分隔数据。...也可以更新提交图等辅助索引。 建议用户定期在每个存储库中运行此任务,保持良好磁盘空间利用率和良好运行性能。...例如, git svn 创建存储库中 git svn-id 字符串可以通过以下方式删除: git filter-branch --msg-filter ' sed -e "/^git-svn-id...在后一种情况下,使用引用提交对象中记录提交时间。另外,如果使用 tar 格式,则提交 ID 存储在全局扩展 pax 头中;它可以使用 git get-tar-commit-id 提取。

28410
  • 从仓库中移除敏感信息

    要从仓库历史记录中完全删除不需要文件,你可以使用 git filter-branch命令或 BFG Repo-Cleaner。...git filter-branch 命令和 BFG Repo-Cleaner 会重写你版本库历史记录,这会更改你修改现有提交和任何相关提交SHA。更改提交SHA可能会影响仓库中打开请求。...为了说明 git filter-branch 如何工作,我们将向你展示如何从仓库历史记录中删除具有敏感数据文件,并将其添加到 .gitignore 中确保它不会被意外重新提交。 1....将含有敏感数据文件添加到 .gitignore中,确保你不会意外地再次提交。...经过一段时间,你确信 git filter-branch 没有意外副作用,你可以强制你本地仓库中所有对象被解除引用和垃圾收集,使用下面的命令(使用Git 1.8.5或更新版本): git for-each-ref

    94820

    分享5个Git使用技巧

    第一步:使用git reflog查看提交信息 git reflog 第二步:rebase操作 git rebase -i 5a480a4b 执行完这个命令后,就可以看到 5a480a4b 后所有 commit...把原本pick单词修改为drop就表示该ID对应 commit log 我们需要删除。vim 保存退出。 第三步:解决冲突,强制推送更新到远程 git add ....2、修改历史提交人信息 不知道你有没有遇到过这种情况,在维护个人开源项目时,常常使用公司邮箱和用户名提交Git 信息。一旦提交了,又想修改,如何操作呢?...' 第二步:执行下面脚本 git filter-branch -f --env-filter ' OLD_EMAIL="原来邮箱" CORRECT_NAME="studeyang" CORRECT_EMAIL...git push origin v0.0.1 5.6 轻量标签 $ git tag v0.0.1-lw 5.7 更新 tag $ git push origin --delete v0.0.1 $ git

    26820

    Git目录为什么这么大

    借助 git filter-branch 便可以重写历史提交,当然这也是Git中最危险操作 2.3 如何彻底删除一个文件 一个文件提交为例,这个文件可能会关联很多次提交,只有将每一次与该文件有关提交记录进行重写...仓库中提交,我们用它来列出所有提交中涉及文件名及其ID。...该命令可以指定只显示某个引用(或分支)上下游提交 --objects 列出该提交涉及所有文件ID --all 所有分支提交,相当于指定了位于/refs下所有引用 verify-pack...参数说明: filter-branch 命令可以用来重写Git仓库中提交 --index-filter 参数用来指定一条Bash命令,然后Git会检出(checkout)所有的提交, 执行该命令,...=now --aggressive # 推送上去 # 此推将更新远程服务器上所有refs分支 $ git push 其他用法 # 删除所有的名为'id_dsa'或'id_rsa'文件 $ java

    1.3K10

    教你如何去掉git历史中敏感信息

    比如碰到下列情况时,如何使用 GIT 实现想要操作: 1、代码或日志中注释误提交了,怎么修改它? 2、我想丢弃指定提交历史可不可以? 3、在提交很久历史记录中存在敏感信息,如何修改或删除它?...移除指定提交历史 比如,刚修复了一条测试反馈错误,最终定位到并不是代码问题只需要重启下服务就可以了,但改过代码已经进入了 GIT ,此时重新进行 add -> commit -> push 提交可以...先通过 $ git log 命令在历史记录中查找到想要删除某次提交 commit id,我这里是:5e63d3cfa09176422b0b52714bd77af1a0ce8e63。...当我们根据关键词 log 搜索提交历史存在敏感信息,是很久以前提交并且那次提交改动了很多文件内容,不能通过移除 commit id 方式进行删除,此时该怎么办呢?...核弹级选项: filter-branch 官方文档上实例:要从整个历史中删除一个名叫 password.txt 文件,你可以filter-branch 上使用 --tree-filter 选项

    2.3K00

    Git 仓库体积过大,缩减记录

    一、前言 写这篇博客主要是因为存储博客图片和一些文件占用GitHub仓库过大,导致仓库体积变大,所以找了一些方案,记录一下 image.png 上图可以看到原仓库已经很大了,所以必须要清除一些仓库中没用大文件了...二、具体操作 首先,git仓库中删除历史大文件分为以下步骤: 查找大文件id→根据id查找大文件所在路径→删除文件→删除文件历史记录→提交→清除本地缓存 (我按照我理解总结,不知道是不是对,如果有错误的话...具体命令如下:【ps:后面有更简单代码,如果想要直接用的话可以直接看本文后面】 1....根据文件id查询文件路径 $ git rev-list --objects --all | grep 【大文件id】 【大文件id】填上面步骤1中id,例如上图最后一个id为:273c3734ffbe8df3092e8409f41f895b190612ee...删除文件历史记录 $ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch --ignore-unmatch

    6K10

    Git 基础命令

    ] [remote-branch] #切换到指定分支,并更新工作区 $ git checkout [branch-name] #建立追踪关系,在现有分支与指定远程分支之前 $ git branch -...git 提升内容 储藏暂存内容 # 想要切换分支,但是还不想要提交之前工作,可以储存修改信息,将新储藏推送到栈上 $ git stash / git stash save # 在这时,能够轻易切换分支并在其他地方工作...要查看储藏东西,可以使用 git stash list $ git stash list # 可以将刚刚储藏重新加载回来 $ git stash apply # 也可以通过储藏序号进行加载 $ git...如果想要让 trunk 子目录作为每一个提交项目根目录,filter-branch可以帮助你那么做,再在新项目根目录是 trunk 子目录且 Git 会自动移除所有不影响子目录提交。...任何情形下,你也可以通过 filter-branch 来一次性修改多个提交邮箱地址。

    47530

    Git 修改历史 commits 中用户名和邮箱

    2.查看仓库历史提交信息 git clone 你要修改仓库,进入该仓库目录,打开 git bash 界面,执行 git log 命令查看历史提交信息(重点关注 Author)。...git filter-branch -f --env-filter ' OLD_EMAIL="原来邮箱" CORRECT_NAME="现在名字" CORRECT_EMAIL="现在邮箱" if [...如果 commit 记录比较多的话执行时间会比较长。 等待执行完成后,再查看 git log 可以看到已经修改成功。...Rakefile' HEAD 4.将修改结果推送到远程 git push 将修改后结果推送到远程后,git log 去看一下之前提交记录中,name 和 email 信息都更新了。...Linux/Mac下可以写个脚本 在项目根目录下创建git-email.sh,写入下面这段代码: #!

    4.1K20

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

    注意这个文件最后一行,它会 ^ 开头。 这个符号表示它上一行标签是附注标签,那一行是附注标签指向那个提交。 数据恢复 在你使用 Git 时候,你可能会意外丢失一次提交。...你需要找出最后一次提交 SHA-1 然后增加一个指向它分支。 窍门就是找到最后一次提交 SHA-1 - 但是估计你记不起来了,对?...最方便,也是最常用方法,是使用一个名叫 git reflog 工具。 当你正在工作时,Git 会默默地记录每一次你改变 HEAD 时它值。 每一次你提交或改变分支,引用日志都会被更新。...引用日志(reflog)也可以通过 git update-ref 命令更新,我们在 Git 引用 有提到使用这个命令而不是是直接将 SHA-1 值写入引用文件中原因。...为了使显示信息更加有用,我们可以执行 git log -g,这个命令会标准日志格式输出引用日志。

    83220

    7.6 Git 工具 - 重写历史

    可以在将暂存区内容提交前决定哪些文件进入提交可以通过 stash 命令来决定不与某些内容工作,也可以重写已经发生提交就像它们另一种方式发生一样。...这个命令是 filter-branch,它可以改写历史中大量提交,除非你项目还没有公开并且其他人没有基于要改写工作提交工作,你不应当使用它。 然而,它可以很有用。...为了从整个提交历史中移除一个叫做 passwords.txt 文件,可以使用 --tree-filter 选项给 filter-branch: $ git filter-branch --tree-filter...如果想要移除所有偶然提交编辑器备份文件,可以运行类似 git filter-branch --tree-filter 'rm -f *~' HEAD 命令。...如果想要让 trunk 子目录作为每一个提交项目根目录,filter-branch可以帮助你那么做: $ git filter-branch --subdirectory-filter trunk

    68560

    公司敏感数据被上传Github,吓得我赶紧改提交记录

    那这种情况,我们就需要更改我们提交记录中用户名和邮箱。 可以通过全局设置或者特定仓库设置两种方式来修改我们提交用户信息。 全局 全局设置可以影响所有的代码提交。...git config --global user.name "程序员小富" git config --global user.email "邮箱信息" 你可以通过如下命令来查看Git全局配置: git...git config user.name "程序员小富" git config user.email "邮箱信息" 篡改提交记录 单条修改 Git提供了amend命令,可以用来修改最新提交记录。...git push origin master 批量修改 Git官网提供了很多种修改提交记录信息方法,这里主要介绍下filter-branch,它可以通过脚本方式批量修改历史提交记录信息。...filter-branch 它能实现如下功能,正好符合我们要批量修改历史提交记录中用户、邮箱需求。

    14310

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

    本文主要介绍如何使用 git filter-branch 命令删除 Git 仓库中敏感文件及其历史记录。...在 Git 中,我们通常会将敏感信息(如密码、私钥等)存储在 .gitignore 文件中,以防止这些信息被意外提交到仓库。...操作步骤 2.1 备份仓库 保险起见,在进行任何操作之前,建议先创建仓库备份,以防万一发生不可预知问题。这里我们可以直接复制文件夹,或者在其他文件夹 git clone 一下仓库。...删除 2.4 垃圾回收 运行以下命令删除未引用数据并压缩仓库。这将帮助减少仓库大小。...在一些特殊情况下,可以解决大麻烦。但是,如果你仓库是公开或已被 fork,并且其中包含了敏感信息,例如私钥或密码,及时更新秘钥和密码才是正确选择。

    39440

    关于 Git 重写提交历史一些笔记

    Git可以通过git stash来决定不与某些内容同时提交,也可以重写已经发生提交就像它们另一种方式发生一样。...当保存并关闭编辑器后,编辑器会将更新提交信息写入新提交中,它会成为新最后一次提交。...如果你想要修改最后一次提交实际内容,那么流程很相似: 首先作出你想要补上修改,暂存 stash 它们,然后用git commit--amend 改进后提交来替换掉旧有的最后一次提交,使用这个技巧时候需要小心..., filter-branch 是一个可能会用来擦洗整个提交历史工具。...为了从整个提交历史中移除一个叫做passwords.txt文件,可以使用 --tree-filter 选项给 filter-branch $ git filter-branch --tree-filter

    37120
    领券