Git错误,需要删除大文件

时间:2015-10-27 04:36:31

标签: git github

当我尝试推送到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'

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

10 个答案:

答案 0 :(得分:7)

要删除大文件,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

或者如果你想要更多关于如何在GitHub上处理大文件的general information

下次在/log

中添加.gitignore

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

添加到先前的答案:

我们将按照您所说的从提交中删除大文件

  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,它应该可以工作

答案 3 :(得分:0)

您可以在提交前恢复git add。

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

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

答案 4 :(得分:0)

@Daniel

您可以使用.gitignore文件从git repo中忽略该log(s)文件。 为此,您必须将以下行添加到.gitignore文件

/log

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

答案 5 :(得分:0)

要改善上述答复之一,您需要

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

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

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

答案 6 :(得分:0)

git reset --soft HEAD~1

然后从提交中排除文件。

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

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

这应该可以解决问题

答案 7 :(得分:0)

添加到先前的答案:

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 :(得分:0)

这个命令对我有用

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

答案 9 :(得分:0)

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

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