【问题标题】:Git error, need to remove large fileGit错误,需要删除大文件
【发布时间】:2023-03-18 02:00:01
【问题描述】:

当我尝试推送到 git 时遇到此错误,我不知道如何修复它。

Counting objects: 1239, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1062/1062), done.
Writing objects: 100% (1239/1239), 26.49 MiB | 679.00 KiB/s, done.
Total 1239 (delta 128), reused 0 (delta 0)
remote: warning: File log/development.log is 98.59 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: efd2d13efa4a231e3216dad097ec25d6
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File log/development.log is 108.86 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File log/development.log is 108.74 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File log/development.log is 108.56 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File log/development.log is 106.58 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File log/development.log is 103.70 MB; this exceeds GitHub's file size limit of 100.00 MB
To git@github.com:myUsername/myRepo.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@github.com:myUsername/myRepo.git'

我猜我需要从提交中删除大文件,但我该怎么做呢?

【问题讨论】:

  • 这是一个 Rails 项目吗?不要将您的 log/ 目录添加到 git。那不应该被版本化。
  • 我现在意识到了。以前不知道。

标签: git github


【解决方案1】:

您可以在提交前还原 git add。

检查这个问题:How to undo 'git add' before commit? 它应该工作。并且不要将大文件发送到 git,这是不值得的;)

此外,通过在您的日志路径上添加 git ignore 来排除您的日志。

【讨论】:

  • 如果您收到此错误,则表示您正在尝试推送,这意味着您已经提交。
【解决方案2】:

@丹尼尔

您可以使用 .gitignore 文件忽略来自 git repo 的日志文件。 为此,您必须将以下行添加到您的 .gitignore 文件中

/log

并尝试再次提交。
希望这些详细信息可以帮助您解决问题。

【讨论】:

  • 我已经试过这个并再次提交,但它没有工作。
  • 你需要恢复 git add,检查我的答案@Daniel
【解决方案3】:

要删除大文件,GitHub suggests:

$ git rm --cached giant_file
# Stage our giant file for removal, but leave it on disk

git commit --amend -CHEAD
# Amend the previous commit with your change
# Simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well

git push
# Push our rewritten, smaller commit

或者,如果您想了解更多 general information 关于如何在 GitHub 上处理大文件的信息。

下次在您的.gitignore 中添加/log

【讨论】:

    【解决方案4】:

    我最近遇到了同样的问题,您实际上可以过滤特定文件的分支并将其删除 -

    git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
    

    【讨论】:

    • 您需要从工作树的顶层运行此命令。
    【解决方案5】:

    要改进上述回复之一,您需要

    git filter-branch -f --tree-filter 'rm -f /path/to/file' HEAD --all
    

    为了从历史记录中删除您的文件。您需要-f 强制重写任何备份,--all 需要从所有分支中删除文件。更多信息在这里:Git docs

    您的大文件错误不会通过从 git 缓存中删除而消失,因为它仍然潜伏在提交历史记录中。

    【讨论】:

    • 谢谢,这对我有用!作为旁注,我必须确保“/path/to/file”有正斜杠和相对路径
    • 如何从提交历史中删除它?
    • @jhabarsinghBhati 这正是该命令的作用。
    【解决方案6】:

    git reset --soft HEAD~1

    然后从提交中排除该文件。

    注意:使用 HEAD~N 可以返回 N 次之前的提交。

    使用这个,返回一个提交,如果你能看到它,从提交中删除大文件,然后重新提交并推送。

    这应该可以解决问题

    【讨论】:

      【解决方案7】:

      添加到以前的答案:

      git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch path_to_the_file/your_big_file'
      

      此外,当我尝试拉取时,我得到“拒绝合并不相关的历史”。

      解决方法是:

      git pull origin branch_name --allow-unrelated-histories
      

      那就解决你可能发生的冲突,这次不用big_file推送。

      【讨论】:

        【解决方案8】:

        添加到之前的答案:

        如你所说,我们将从提交中删除大文件

        1. 从终端推送只是为了得到大文件路径git push --set-upstream origin Remote_branch_name,在错误中找到大文件路径,比如RepositoryName/folders.../bigFileName

        2. 从所有分支中删除文件,git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch path_and_big_file' 越过我们在第一节中找到的路径,而不是 path_and_big_file

        3. 执行git pull origin branch_name --allow-unrelated-histories不会得到unrelated histories错误

        4. 现在尝试推送到 git,它应该可以工作

        【讨论】:

          【解决方案9】:

          这个命令对我有用

          git filter-branch -f --index-filter 'file path'
          

          【讨论】:

            【解决方案10】:

            我已经删除了认为会有所帮助的文件。在分支上运行此命令对我有用。

            git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch path/to/file'
            

            【讨论】:

              猜你喜欢
              • 2018-01-26
              • 2011-01-20
              • 1970-01-01
              • 2018-08-05
              • 2017-09-18
              • 2011-12-26
              • 2012-02-24
              • 1970-01-01
              • 2022-07-06
              相关资源
              最近更新 更多