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

在git filter-branch之后,再次运行它会得到HEAD:在工作树中没有这样的文件

git filter-branch是Git版本控制系统中的一个命令,用于对历史提交进行重写和过滤操作。它可以用于修改提交的内容、删除或合并提交等操作。

当我们运行git filter-branch命令后,它会根据指定的过滤条件对历史提交进行重写,并生成一个新的分支。这个新的分支会包含经过过滤的提交历史。

在第一次运行git filter-branch时,如果没有指定过滤条件或者过滤条件没有匹配到任何提交,那么会得到一个空的分支,即在工作树中没有任何文件。

如果我们再次运行相同的git filter-branch命令,由于过滤条件没有改变,历史提交也没有改变,所以会得到相同的结果,即HEAD:在工作树中没有这样的文件。

总结起来,git filter-branch命令在重写历史提交时,如果过滤条件没有匹配到任何提交,那么会得到一个空的分支,工作树中没有任何文件。

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

相关·内容

7.6 Git 工具 - 重写历史

这可能涉及改变提交顺序,改变提交信息或修改文件,将提交压缩或是拆分,或完全地移除提交 - 将你工作成果与他人共享之前。...本节,你可以学到如何完成这些非常有用工作这样与他人分享你工作成果时你提交历史将如你所愿地展示出来。 修改最后一次提交 修改你最近一次提交可能是所有修改历史提交操作中最常见一个。...记住 ~3 可能比较容易,因为你正尝试修改最后三次提交;但是注意实际上指定了以前四次提交,即想要修改提交父提交: $ git rebase -i HEAD~3 再次记住这是一个变基命令 - HEAD...这个命令是 filter-branch,它可以改写历史中大量提交,除非你项目还没有公开并且其他人没有基于要改写工作提交做工作,你不应当使用它。 然而,它可以很有用。...你将会学习到几个常用用途,这样得到了它适合使用地方想法。 从每一个提交移除一个文件 这经常发生。 有人粗心地通过 git add . 提交了一个巨大二进制文件,你想要从所有地方删除它。

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

    这件事导致公司对所有员工进行了一次数据安全培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致。...全局修改邮箱地址; 从每一个提交移除一个文件; 使一个子目录做为新根目录 用法 历史提交记录中有很多用户名xiaofu提交记录,现在使用filter-branch批量将他们改写成程序员小富。...如果没有修改成功,可以再次执行,会出现错误提示A previous backup already exists in refs/original/,说明已经执行过了,执行以下命令清除缓存即可再次执行。...git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD 修改完成之后,别忘了推送到远程仓库...有一点比较好,提交代码时,如果提交用户信息与当前账号GitHub信息不一致还会有提示,这样就不怕误用其他信息提交了。

    14310

    Git 维护及数据恢复

    可以手工运行 auto gc 命令: $ git gc --auto 再次强调,这个命令一般什么都不干。...通常最快捷办法是使用 git reflog 工具。当你 (一个仓库下) 工作时,Git 会在你每次修改了 HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。...不过如果有人在某个时刻往项目中添加了一个非常大文件,那们即便他在后来提交中将此文件删掉了,所有的签出都会下载这个大文件。因为历史记录引用了这个文件它会一直存在着。...不过 reflog 以及运行 filter-branchGit 往 .git/refs/original 添加一些 refs 仍有对它引用,因此需要将这些引用删除并对仓库进行 repack...从 size 值可以看出大文件对象还在松散对象,其实并没有消失,不过这没有关系,重要再进行推送或复制,这个对象不会再传送出去。

    57820

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

    这件事导致公司对所有员工进行了一次数据安全培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致。...全局修改邮箱地址;从每一个提交移除一个文件;使一个子目录做为新根目录用法历史提交记录中有很多用户名xiaofu提交记录,现在使用filter-branch批量将他们改写成程序员小富。...如果没有修改成功,可以再次执行,但会出现错误提示A previous backup already exists in refs/original/,说明已经执行过了,执行以下命令清除缓存即可再次执行。...git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD修改完成之后,别忘了推送到远程仓库...有一点比较好,提交代码时,如果提交用户信息与当前账号GitHub信息不一致还会有提示,这样就不怕误用其他信息提交了。

    40710

    Git GC命令清理Git暂存区

    可以手工运行 auto gc 命令: $ git gc --auto 再次强调,这个命令一般什么都不干。...通常最快捷办法是使用 git reflog 工具。当你 (一个仓库下) 工作时,Git 会在你每次修改了 HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。...不过如果有人在某个时刻往项目中添加了一个非常大文件,那们即便他在后来提交中将此文件删掉了,所有的签出都会下载这个大文件。因为历史记录引用了这个文件它会一直存在着。...不过 reflog 以及运行 filter-branchGit 往 .git/refs/original 添加一些 refs 仍有对它引用,因此需要将这些引用删除并对仓库进行 repack...从 size 值可以看出大文件对象还在松散对象,其实并没有消失,不过这没有关系,重要再进行推送或复制,这个对象不会再传送出去。

    6.8K20

    Git 基础命令

    commit 发生变更文件 $ git log --stat #显示某个 commit 之后所有变动,每个 commit 占据一行 $ git log [tag] HEAD --pretty=format...:%s #显示某个 commit 之后所有变动,其“提交说明”必须符合条件 $ git log [tag] HEAD --grep feature #显示某个文件版本历史,包括文件改名 $ git...内容完整上传到仓库,但是当希望开源这个内容时候,需要移除一些无用文件,--tre-filter 选项每一个提交后,运行指定命令,然后重新提交结果。...$ git filter-branch --subdirectory-filter trunk HEAD # 开始工作时忘记运行 git config 来设置你名字与邮箱地址,或者你想要开源一个项目...任何情形下,你也可以通过 filter-branch 来一次性修改多个提交邮箱地址。

    47530

    Git Pro深入浅出(三)

    3.1 客户端钩子 客户端钩子可分为:提交工作流钩子、电子邮件工作钩子和其他钩子。 (1)提交工作流钩子 pre-commit 钩子键入提交信息前运行。它用于检查即将提交快照。...服务端钩子推送到服务器之前和之后运行。...之所以会产生这个问题,是因为这个文件历史是存在它会永远在那里。 所以,你必须找到并移除这些大文件。警告:这个操作对提交历史修改是破坏性。...它会从你必须修改或移除一个大文件引用最早对象开始重写每一次提交。...不过,你引用日志和你 .git/refs/original 通过 filter-branch 选项添加新引用还存有对这个文件引用,所以你必须移除它们然后重新打包数据库。

    87561

    7.7 Git 工具 - 重置揭密

    Git 将上一次检出到工作目录所有文件填充到索引区,它们看起来就像最初被检出时样子。 之后你会将其中一些文件替换为新版本,接着通过 git commit 将它们转换为来用作新提交。...另外两棵以一种高效但并不直观方式,将它们内容存储 .git文件工作目录会将它们解包为实际文件以便编辑。 你可以把工作目录当做 沙盒。...此时如果我们运行 git status,会发现没有任何改动,因为现在三棵完全相同。 现在我们想要对文件进行修改然后提交它。 我们将会经历同样过程;首先在工作目录修改文件。...如果我们现在运行 git commit,它就会记录一条“将该文件恢复到 v1 版本”更改,尽管我们并未在工作目录真正地再次拥有它。...它会工作目录先试着简单合并一下,这样所有还未修改过文件都会被更新。 而 reset --hard 则会不做检查就全面地替换所有东西。 第二个重要区别是如何更新 HEAD

    45030

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

    --------王小波 ---- 公司要求代码提交时候,需要提交信息包含任务单号,我一次需求代码提交,一个分支只有最后几次提交信息包含了任务单号,最初提交没有包含任务单号,所以一直...所以需要修改之前提交信息。 Git 这样操作叫做 重写历史(本质上是些变基操作) 许多时候,使用Git时,可能想要修订提交历史。...比如 改变提交顺序,改变提交信息或修改文件,将提交压缩或是拆分,或完全地移除提交,当然这些操作前提是 将你工作成果与他人共享之前完成 修改最后一次提交 修改你最近一次提交可能是所有修改历史提交操作中最常见一个...现在可以暂存并提交文件直到有几个提交,然后当完成时运行 git rebase--continue: $ git reset HEAD^ $ git add README $ git commit -m...为了从整个提交历史移除一个叫做passwords.txt文件,可以使用 --tree-filter 选项给 filter-branch $ git filter-branch --tree-filter

    37120

    学习git常用及高阶命令

    /updated.zip HEAD $(git diff --name-only HEAD^) 它会输出最近提交修改类容到一个zip文件。 输出两个提交间改变 git archive -o .....-- PATH_TO_FILE_IN_BRANCH_HERE 同一branch协同工作,让git忽视某一指定文件变动,防止merge覆盖 git update-index --assume-unchanged...但是多团队成员共同工作于一条branch情形,常规merge会导致log中出现多条消息,从而产生混淆。....+ 指示没有出现在所给分支,反之,- 就表示出现在了所给分支中了 git cherry -v OTHER_BRANCH_NAME_HERE #例如: 检测master分支 git cherry -...--auto Git 仓库占用空间 $ du -hs .git/objects 45M .git/objects 清理历史文件 git filter-branch --force --index-filter

    81470

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

    不过,相比于使用合并提交来说,变基会通过原来分支为每次提交创建全新提交来重写项目历史。变基主要好处在于你会得到一个更加整洁项目历史。此外,这里还有关于变基陷阱一些讨论。 2....这么做会取消变基修改,并将分支置回到执行git rebase之前状态。 可以运行git rebase –skip来完全忽略该提交。这样,有问题提交所引入变化就不会被添加到历史。...Stash会接收工作目录的当前状态(比如说,修改了追踪文件与暂存区修改等),并将其保存到未完成修改栈这样后面随时可以再来修改。...忽略追踪文件变更 如果你和你同事操纵是相同分支,那么很有可能需要频繁执行git merge或是git rebase。不过,这么做可能会重置一些与环境相关配置文件这样每次合并后都需要修改。...该命令会显示出文件每一行作者,提交hash则会找出该行上一次修改,还能看到提交时间戳: $ git blame 当然,Git命令是非常多,除了上面介绍12个重要命令外,相信各位读者日常工作过程也有自己偏爱且好用一些命令

    87620

    Git目录为什么这么大

    利用Git钩子实现代码发布 index: 存储缓冲区GitExtensionsstage内容 objects:存储对象目录,git对象分为commit对象,tree对象(多叉)...每一个提交Commit相当于一个Patch应用在之前项目上,借此一个项目可以回到任何一次提交时文件状态 于是Git删除一个文件时,Git只是记录了该删除操作,该记录作为一个Patch存储...我们提交前移除了 test.py 文件, 这个文件便从Git所有记录完全消失了 3、解析Object存储方式 为了一步步熟悉Object存储方式,这里本地创建一个空git仓库,且objects...目录没有任何内容,创建一个文件并提交 # mkdir git-test && cd git-test && mkdir src # git init ....一般不用输入整个Hash,输入前几位即可 当前分支对象引用保存在HEAD文件,可以查看该文件得到当前HEAD对应branch,并通过branch查到对应commit对象 # cat .git/HEAD

    1.3K10

    修改 git 历史 commit,你能想到几种方案?

    最近遇到一个 git 问题: 我某个文件里写了一段不应该提交上去内容,没注意,提交上去了。 后来又提交了很多个 commit。 之后我发现了这个,又把它去掉了,提交了一个新 commit。...: git show 9aded3 不过这样还是挺麻烦git reset 到那个 commit,修改之后重新提交。...首先回到初始状态: 然后找到 222 commit: git rebase -i f5482ba 这样就是重新处理从 333 到 HEAD commit,一个个合并回去。...这两种方案都要解决冲突,还是挺麻烦。 又没有什么不用解决冲突方案呢? 有,就是 filter-branch。 它可以一系列 commit 上自动执行脚本。...第三种方案是用 filter-branch --tree-filter,他可以多个 commit 上自动执行脚本,你可以脚本里修改文件内容,这样就不用手动解决冲突了,可以批量修改 commit。

    43520

    Git 中文参考(六)

    得到贴片不适用于patch或git apply;这仅适用于那些希望更改后专注于审阅文本的人。此外,输出显然缺乏足够信息来反向应用这样补丁,甚至手动,因此选项名称。...像 git rebase ;这要求工作清洁并且没有未提交更改。...与 SVN blame 命令一样,忽略工作本地未提交更改; HEAD 修订版文件版本已注释。未知参数直接传递给 git blame 。...我不打算为此添加支持,因为为所有可能极端情况工作是非常困难和耗时Git没有这样做)。如果它们足够相似,Git 可以检测它们,则完全支持提交重命名和复制文件。...例子 假设您要从所有提交删除文件(包含机密信息或侵犯版权): git filter-branch --tree-filter 'rm filename' HEAD 但是,如果某个提交没有文件

    28410

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

    不过由于项目原先部署私有Gogs,后来又移到Github私有仓库,导致我没有在意配置文件。最近打算整理整理开源时候发现,近100 commits里全是我那配置文件。...其实以前我也干过这事,当时是biliapi-python开源,测试用例包含了账号信息。当时一顿骚操作,然后成功把所有commit弄没了。...比如删除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后是正确。...检查没有问题后,用git push --force强制push。之后开发环境fetch之后hard reset(git reset --hard origin/master之类)即可。

    80910

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

    于是Gerrit上查看了近几次提交记录发现两个非常大临时文件被上传了,并且审核通过被推送到Git仓库,没错就是这俩货: ? ?...二、问题分析与解决 删除文件再次提交 首先想到就是将文件删除,然后推送到远程仓库,发现拉取速度一样龟速。 分析了一下,发现这样根本是行不通。...于是想到解决方案如下。 通过git reset --soft命令,将当前提交内容恢复到这个两个大文件提交之前,然后再次commit,再次push到远程仓库,结局可以想而知,这样就想删除文件?...git reset --soft命令一样是无法将提交记录从仓库抹掉,虽然通过reset之后,大文件提交记录在git log已经查找不到,但实际上,这个记录并不会真正从仓库删除,只要能找到commit...,也就是说,想要永久删除仓库某个文件这样是行不通

    2.6K20

    25个 Git 进阶技巧

    这个文件包含了对象或其他列表。这里提到对象(或二进制大对象)是和本次提交相关实际内容(它也是一个文件,另外,尽管文件名并没有包含在对象里,但是存储)。...从文件系统里保存/取回改动 有些项目(比如Git项目本身)git文件系统中直接保存额外文件而并没有将它们加入到版本控制。...这样这个目标文件就已经保存到数据库中了,但是如果你没有设定一个指向它指针的话它会被当做垃圾回收。...当我们需要使用这个文件时候可以这样做: $ git cat-file blob myfile 这个对于一些工具文件很有用,开发者可能会用到(密码,GPG密钥,等等)但是又不希望每次都检出到硬盘(尤其是实际工作...class' HEAD 如果你已经推送到origin了,但之后提交了一些垃圾改动,你也可以推送前本地系统里这样做: $ git filter-branch --tree-filter 'rm -f

    43960

    Git内部原理介绍

    提交(commit),一个提交对象保存版本库每一次变化元数据,每一个提交对象指向一个目录对象,这个对象一张完整快照补货提交时版本库状态。...会这样更新HEAD文件 ref:refs/heads/test ORIG_HEAD 某些操作(如:merge、reset),会把调整为新值之前先前版本HEAD记录到OERG_HEAD,只用其可以恢复或回滚之前状态或做个比较...(分支)提交对象指针 四、git 版本演变 准备工作:创建一个没有任何文件git初始库 $ git init test Initialized empty Git repository in /data...add git tarball 从7b30847之后所有提交历史完全移除该文件 $ git filter-branch —index-fileter ‘git rm —ignore-unmatch...--cached 需要从索引移除,使得在运行过滤器是,并不会将每个修订版本检出到磁盘 --ignore-unmatch 如果尝试删除模式不存在时,不提示错误 filter-branch 用于指定从那个提交以来历史

    17.1K83

    从仓库移除敏感信息

    要从仓库历史记录完全删除不需要文件,你可以使用 git filter-branch命令或 BFG Repo-Cleaner。...使用 filter-branch 警告:如果你暂存(stash)更改后运行 git filter-branch,你将无法使用其他暂存命令检索你更改。...为了说明 git filter-branch 如何工作,我们将向你展示如何从仓库历史记录删除具有敏感数据文件,并将其添加到 .gitignore 以确保它不会被意外重新提交。 1....将含有敏感数据文件添加到 .gitignore,以确保你不会意外地再次提交。...经过一段时间,你确信 git filter-branch 没有意外副作用,你可以强制你本地仓库所有对象被解除引用和垃圾收集,使用下面的命令(使用Git 1.8.5或更新版本): git for-each-ref

    94920
    领券