如何删除在 git 中错误提交的大文件 [重复]

     2023-02-19     105

关键词:

【中文标题】如何删除在 git 中错误提交的大文件 [重复]【英文标题】:How do I remove a big file wrongly committed in git [duplicate] 【发布时间】:2011-12-26 08:45:46 【问题描述】:

可能重复:How to purge a huge file from commits history in Git?

我做了一件愚蠢的事。想象一下,我提交了一个 100MB 的文件。然后我看到这个并删除这个文件并再次提交。这是删除文件的正常过程。

但现在的副作用是我的历史记录很重,因为它保存了这个大文件(我相信这就是它很重的原因)。我只使用本地git,所以我没有在任何服务器上同步。

我怎样才能彻底删除这个文件并节省磁盘空间?

【问题讨论】:

查看我的问题的已接受答案***.com/questions/7969831/… 使用 BFG repo-cleaner,一个更简单、更快的替代 git-filter-branch 的替代品,由我专门创建,用于从 Git 历史记录中删除不需要的文件。见***.com/a/17890278/438886 【参考方案1】:

您可以使用 git filter-branch 命令来完成,如下所示:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path_to_file" HEAD

你可以在这里找到更多文档http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository

【讨论】:

请注意,它还会删除当前签出的版本,因此如果需要保留它,请确保您有备份。 我使用的是 Windows。我不得不将单引号换成双引号。 @rleelr 我认为 github 页面提供了一个干净的解决方案而不影响其他文件:help.github.com/articles/… 我有这个错误:Cannot rewrite branches: You have unstaged changes. 1. git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD 2. 如果出现此错误:无法重写分支:您有未暂存的更改。 3.git stash save 4.git push origin master --force【参考方案2】:

您要查找的命令是filter-branch。它允许您从登记中永久删除文件。这个博客有一个很棒的教程,介绍如何从存储库中删除有问题的文件

http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository

【讨论】:

【参考方案3】:

您可以从David Underhill 获取这个很棒的脚本来从 git 存储库中删除文件:

#!/bin/bash
set -o errexit

# Author: David Underhill
# Script to permanently delete files/folders from your git repository.  To use 
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2

if [ $# -eq 0 ]; then
    exit 0
fi

# make sure we're at the root of git repo
if [ ! -d .git ]; then
    echo "Error: must run this script from the root of a git repository"
    exit 1
fi

# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD

# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune

【讨论】:

要小心,因为如果你像我这样有很多提交,这个脚本可能会运行很长时间(~30k,它会持续一整天)。 @AlainP 你应该摆脱旧的提交,谁需要那么多(30K)? :)

git进阶|03-如何彻底删除git中的大文件(代码片段)

一、问题描述当使用git管理了一个大文件的时候,如果将该文件从文件系统删除之后再commit到仓库,这个时候仓库中依然有该文件的记录。这样会导致.git仓库一直比较大,所以,如果确保不会回退到之前的版本了... 查看详情

git进阶|03-如何彻底删除git中的大文件(代码片段)

一、问题描述当使用git管理了一个大文件的时候,如果将该文件从文件系统删除之后再commit到仓库,这个时候仓库中依然有该文件的记录。这样会导致.git仓库一直比较大,所以,如果确保不会回退到之前的版本了... 查看详情

如何在 Bitbucket 中删除最新的 Git 提交?

】如何在Bitbucket中删除最新的Git提交?【英文标题】:HowtodeletelatestGitcommitinBitbucket?【发布时间】:2016-06-2900:33:44【问题描述】:我将laravel文件存储在bitbucket中,并且我还有该项目的本地副本。每次我保存本地副本时,我都会将... 查看详情

text删除意外提交给git的大文件(代码片段)

查看详情

忽略已经提交到git存储库的文件[重复](代码片段)

...个已经初始化的Git存储库,我添加了一个.gitignore文件。如何刷新文件索引以便忽略我想忽略的文件?答案要取消已经添加/初始化到存储库的单个文件,即停止跟踪文件但不从系统中删除它:gitrm--cachedfilename要解开现在.gitignore中... 查看详情

git:如何使其“意识到”文件已被删除[重复]

】git:如何使其“意识到”文件已被删除[重复]【英文标题】:git:howtomakeit\'realise\'thatafileisremoved[duplicate]【发布时间】:2012-03-0723:27:40【问题描述】:当我通过转到我自己的文件夹并手动删除它(不是使用git命令行界面)来删除... 查看详情

如何删除对 git 的提交 [重复]

】如何删除对git的提交[重复]【英文标题】:HowcanIdeleteacommittogit[duplicate]【发布时间】:2012-10-0904:46:00【问题描述】:我想摆脱远程分支上的一些提交。例如,如果历史看起来像:A->B->C->D我想删除C和D给我:A->BB现在HEAD... 查看详情

.git文件过大!删除大文件

...,如果你提交了大文件,那么即使你在之后的版本中将其删除,但是,实际上,记录中的大文件仍然存在。为什么呢?仔细想一想,虽然你在后面的版本中删除了大文件,但是Git是有版本倒退功能的吧,那么 查看详情

如何在 Github 和 Bitbucket 上从 git 中删除提交

】如何在Github和Bitbucket上从git中删除提交【英文标题】:HowtodeletecommitsfromgitonGithubandBitbucket【发布时间】:2016-11-1900:50:27【问题描述】:我不小心从我的.gitignore文件中的Django项目中的.idea目录中推送了文件。我正在尝试从我的bit... 查看详情

如何从 Git 历史记录中永久删除提交?

】如何从Git历史记录中永久删除提交?【英文标题】:HowtopermanentlydeleteacommitfromGit\'shistory?【发布时间】:2013-08-0307:40:53【问题描述】:团队中的一位开发人员不小心提交了一个200MB的文件并将其推送到我们的Git服务器。几天后... 查看详情

如何从特定修订版更改 GIT 中提交的作者 [重复]

】如何从特定修订版更改GIT中提交的作者[重复]【英文标题】:HowdoIchangetheauthorofacommitinGITfromspecificrevision[duplicate]【发布时间】:2013-12-1905:33:46【问题描述】:我提交了一些作者姓名错误的文件,当我看到gitconfig-l时,它正在查... 查看详情

从 git 数据库中完全删除提交 [重复]

】从git数据库中完全删除提交[重复]【英文标题】:Completelyremovecommitfromgitdatabase[duplicate]【发布时间】:2012-07-0113:04:09【问题描述】:我需要一个提交才能不再出现在提交的git数据库中。我需要能够删除提交abc123...以便gitcheckoutab... 查看详情

IntelliJ/GIT:如何从提交窗口清除/删除文件?

】IntelliJ/GIT:如何从提交窗口清除/删除文件?【英文标题】:IntelliJ/GIT:HowdoIclear/removefilesfromthecommitwindow?【发布时间】:2021-11-2816:48:20【问题描述】:我刚刚在IntelliJ中启动了一个新项目,并在github上创建了一个新存储库,我可... 查看详情

如何在不从磁盘中删除文件的情况下 git rm 文件? [复制]

】如何在不从磁盘中删除文件的情况下gitrm文件?[复制]【英文标题】:HowdoIgitrmafilewithoutdeletingitfromdisk?[duplicate]【发布时间】:2010-11-1909:00:59【问题描述】:该命令删除我系统中的文件。我的意思是只从Git存储库中删除文件。如... 查看详情

git:恢复一个已经在提交中被删除的文件

...题是,如果我们在之前的某一个提交中删除了一个文件,如何使用git将此文件恢复出来。首先我们要做的是找到当时删除的这个文件对应的提交。比较简便的方法是使用一些图形化的Git软件,可以直接浏览找到对应的提交。这些... 查看详情

如何从 git 跟踪中删除文件? [复制]

】如何从git跟踪中删除文件?[复制]【英文标题】:Howtoremoveafilefrombeingtrackedbygit?[duplicate]【发布时间】:2016-02-0712:02:20【问题描述】:我有一个文件config-dev.php将用作开发版本配置。现在,另一位开发人员想要在此文件中进行自... 查看详情

在 git 中,如何将文件恢复到 3 次提交前?

】在git中,如何将文件恢复到3次提交前?【英文标题】:Ingit,howdoyourevertafilebackto3commitsago?【发布时间】:2014-01-2622:43:09【问题描述】:我在git中更改了一个图像文件,它是2次提交前的。我如何回到之前的2个提交?通过命令行... 查看详情

#git大文件清理

...库,则可以处理了大文件后,直接提交到仓库。Git+Gerrit如何永久删除历史文件(大文件/私密文件)寻找并删除Git记录中的大文件 查看详情