59

I am getting this error when I try to push to git and I have no idea how to fix it.

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'

I'm guessing I need to remove the large file from the commit, but how do I do that?

Daniel
  • 1,284
  • 3
  • 12
  • 17

12 Answers12

51

To remove large files, 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

Or if you want more general information on how to work with large files on GitHub.

And next time add /log in your .gitignore

Daniel Andrei Mincă
  • 4,446
  • 2
  • 19
  • 30
  • 8
    This doesn't work when you already made another commit deleting the file in an initial attempt to get past Git's annoyances.. – aviator Aug 03 '22 at 02:31
30

To improve upon one of the reply above, you need

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

in order to remove your file even from the history. You need -f to force rewriting any backup and --all to remove file from all branches. More information here: Git docs

Your large file error won't go away by removing it from the git cache because it is still lurking in the commit history.

user30850
  • 401
  • 4
  • 3
23

I faced the same issue recently, you can actually just filter the branch for specific file and remove it -

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
Ritesh Chandnani
  • 425
  • 4
  • 14
  • 1
    You need to run this command from the toplevel of the working tree. –  Jan 02 '20 at 01:59
16

git reset --soft HEAD~1

then exclude the file from the commit.

Note: Use HEAD~N to go back to N number of previous commits.

use this , go back a commit ,remove the large file from the commit if you can see it , then re commit and push.

this should solve the problem

11

I had already deleted the file thinking that would help. Running this command on the the branch worked for me.

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch path/to/file'
CZTopp
  • 111
  • 1
  • 3
4

Adding to the previous answers:

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

Additionally, when I tried to pull I got "Refusing to merge unrelated histories".

Solution was to use:

git pull origin branch_name --allow-unrelated-histories

Then solve your possible conflicts, and push this time without the big_file.

Kim
  • 4,080
  • 2
  • 30
  • 51
Timbus Calin
  • 13,809
  • 5
  • 41
  • 59
4

As of October 2022, git instructs the user to use 'git filter-repo' because:

WARNING: git-filter-branch has a glut of gotchas generating mangled history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an 
alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-branch manual page for more details; to squelch this warning,
         set FILTER_BRANCH_SQUELCH_WARNING=1.

If (for some reason) the documentation for git-filter-repo (https://github.com/newren/git-filter-repo/) is not exactly clear, the following will definitely get you on track (it did for me, as I'm apparently a bit obtuse):

https://superuser.com/a/1589985/1054410

The following examples from the git-filter-repo docs show how to translate between, say:

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

to

git filter-repo --invert-paths --path /path/to/file

https://github.com/newren/git-filter-repo/blob/main/Documentation/converting-from-filter-branch.md#cheat-sheet-conversion-of-examples-from-the-filter-branch-manpage

Finally, you might need to add '--force' to the end of the statement, because git filter-repo expects a 'fresh clone'.

Aborting: Refusing to destructively overwrite repo history since      
this does not look like a fresh clone.
  (expected freshly packed repo)
Please operate on a fresh clone instead.  If you want to proceed      
anyway, use --force.
childerino
  • 331
  • 2
  • 5
3

Adding to the previous answers:

We are going to remove the large file from the commit as you said

  1. Do the push from the terminal just to get the large file path git push --set-upstream origin Remote_branch_name, locate the large file path in the errors, something like RepositoryName/folders.../bigFileName.

  2. Remove the file from all the branches, git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch path_and_big_file' past the path that we found in section one instead of path_and_big_file.

  3. Execute git pull origin branch_name --allow-unrelated-histories to not get unrelated histories error

  4. Now try to push to git, it should work

Guy Luz
  • 3,372
  • 20
  • 43
0

You can revert git add before commit.

Check this question: How to undo 'git add' before commit? It should work. And don't send big files to git, it's not worthy ;)

Also, exclude your logs, by adding git ignore on your logs path.

Community
  • 1
  • 1
m.aibin
  • 3,528
  • 4
  • 28
  • 47
0

@Daniel

You can ignore that log(s) file from git repo using .gitignore file. for that you have to add below line to your .gitignore file

/log

and try to commit again.
Hope this details help you to fix your issue.

hgsongra
  • 1,454
  • 15
  • 25
0

This command worked for me

git filter-branch -f --index-filter 'file path'
Tejas Niturkar
  • 181
  • 2
  • 3
0

i was able to solve mine with this

  • git reset --soft HEAD~1
  • git pull origin master --allow-unrelated-histories
  • git push -u origin master or git push
Abayomi Olowu
  • 199
  • 1
  • 10