Can't remove file from git commit

GitGithubTerminal

Git Problem Overview


How do I discard all git commits that haven't been pushed and then force git to not commit anything in the data/ directory?

I'm trying to force overwrite all changes to a project stored on github from my c9.io project. I accidentally git added some mongodb data files. I tried to add the data/ directory to .gitignore. I pulled from github to get the updated .gitignore, however when I try and git push, these stubborn files in data/ are still staged for commit. I also tried git reset, git rebase, git clean and this where I changed dmpfile.sql to pi/data/node-login.1.

Please help I've been at this for hours and I'm really frustrated

Counting objects: 15, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 150.22 KiB | 92 KiB/s, done.
Total 13 (delta 6), reused 0 (delta 0)
remote: warning: File pi/data/local.0 is 64.00 MB; this is larger than GitHub's recommended maximum file size of 50 MB
remote: warning: File pi/data/node-login.0 is 64.00 MB; this is larger than GitHub's recommended maximum file size of 50 MB
remote: error: GH001: Large files detected.
remote: error: Trace: e6ade98208c08b634ed28aefea36dfbb
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File pi/data/node-login.1 is 128.00 MB; this exceeds GitHub's file size limit of 100 MB
To [email protected]:bobbyg603/goddard.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:bobbyg603/goddard.git'

.gitignore:

lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz

data/

pids
logs
results

npm-debug.log
node_modules

.project
.settings

Thanks, Bobby

Git Solutions


Solution 1 - Git

Thanks to Chris I was able to fix this by running the following:

>git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch pi/data/node-login.0'
> >git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch pi/data/node-login.1' > >git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch pi/data/local.0'

Solution 2 - Git

git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch FOLDERNAME" -- --all

replace FOLDERNAME with the file or folder you wish to remove from the given git repository.

Solution 3 - Git

This worked for me:

git rm --cached name_of_a_giant_file
git rm --cached name_of_another_giant_file
git commit --amend -CHEAD
git push

Source: Github Help: Working with large files

Solution 4 - Git

git filter-branch --tree-filter 'rm -rf path/whaever' HEAD

This is a little bit simpler and it is a way to just remove and rewrite it from the history. That's the result

Rewrite 5ac3045254d33fc5bb2b9fb05dccbdbb986b1885 (61/62) (24 seconds passed, remaining 0 predicted)
Ref 'refs/heads/features_X' was rewritten

Now, I can push

Solution 5 - Git

I've used BFG Repo Cleanner simple and fast, works like a charm

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionbobbyg603View Question on Stackoverflow
Solution 1 - Gitbobbyg603View Answer on Stackoverflow
Solution 2 - GitGankView Answer on Stackoverflow
Solution 3 - Gitbiscuit314View Answer on Stackoverflow
Solution 4 - GitackuserView Answer on Stackoverflow
Solution 5 - GitVictor LaerteView Answer on Stackoverflow