https://git-scm.com/docs/git-reset
https://www.gitkraken.com/learn/git/git-reset
### reset HEAD to a specified submit, and DISCARD the changes of the submit
# [ ✅ reset HEAD, ❌ stage changes(git add), ❌ keep workspace changes ]
git reset --hard <SUBMIT_CODE>
### reset HEAD to a specified submit, and KEEP the changes of the submit being staged(git add)
# [ ✅ reset HEAD, ✅ stage changes(git add), ❌ keep workspace changes ]
git reset --soft <SUBMIT_CODE>
### reset changes to be unstaged(NOT git add)
# [ ❌ reset HEAD, ❌ stage changes(git add), ✅ keep workspace changes ]
git reset <FILE_PATH>
# unstage all
git reset
### force push local change to remote
git push -f