git update-index --assume-unchanged my-tracked-file-that-is-awol
git status -u --ignored
git update-index --no-assume-unchanged my-tracked-file-that-is-awolgit filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEADrm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune$ git commit ... (1)
$ git reset --soft 'HEAD^' (2)
$ edit (3)
$ git add .... (4)
$ git commit -c ORIG_HEAD (5)This is what you want to undo
This is most often done when you remembered what you just committed is incomplete, or you misspelled your commit message, or both. Leaves working tree as it was before "reset". (The quotes may or may not be required in your shell)
Make corrections to working tree files.
Stage changes for commit.
"reset" copies the old head to .git/ORIG_HEAD; redo the commit by starting with its log message. If you do not need to edit the message further, you can give -C option instead.