So I did something stupid with a git project of mine. I accidentally committed and pushed a svg asset directory (~2000 svg files) that shouldn't have been checked into Git. I deleted the assets and then pushed again to remove it from the source code however I am not sure how to remove it from my git commit history.
- 17a3534 - Last valid commit
- 2129212 - Valid changes Invalid SVG Directory
- 9c41416 - Deleted the Invalid SVG Directory
I'm not exactly sure how to fix this, I basically want to revert back to 17a3534 with the pending changes from 2129212 so I can delete the SVG directory and not have any of the .svg in the git commit history but keep the valid changes in the 2129212 commit.
Any ideas on how I would accomplish this?
If I can fix it locally I don't mind doing a force push and overriding the remote server.
CodePudding user response:
Following the advice in Dai's comment:
git reset --soft 2129212
# at this point you'll have all of the svg files staged for deletion
git commit --amend
# now you'll rewrite this commit with only the valid files committed
git push --force-with-lease
Side Note: in Git, the word revert has a slightly different meaning than it does in English. Git revert
will effectively undo a commit by creating a new commit that undoes the changes in the original commit. This is normally the preferred method of undoing changes because it enables you to push to a shared branch without re-writing it. The downside, as you've witnessed, is that it doesn't purge the history. If you wish to rewrite the history, instead of revert you would use for example reset
, rebase
, or amend a commit, all of which will usually require a force push afterwards.