How to cancel a local git commit?
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
When working with Git, a version control system widely used in software development, there might be instances where you need to cancel a commit you've made locally. This could be due to an error in the commit message, including the wrong files, or simply committing to the wrong branch.
Understanding the Commit History
Before diving into how to cancel a commit, it's important to understand how Git tracks changes. Each commit in Git includes a snapshot of your project at a given time, along with metadata like the author, commit message, and a unique identifier (SHA hash). You can view the commit history using the git log command. This command displays all the commits in the current branch's history.
Methods to Cancel a Commit
1. Using git reset
git reset is a powerful command that allows you to undo changes in your repository's commit history. There are three main modes to git reset: --soft, --mixed (default), and --hard.
Soft Reset
--soft keeps your changes and the index intact. If you want to keep your file changes but undo the commit:
This command moves the HEAD pointer back one commit (undoing the last commit) but leaves your files and index (staging area) as they were before you ran the commit.
Mixed Reset
--mixed resets the index but not the working tree. This means changes are preserved but not staged:
This is the default option for git reset and will unstage everything up to the last commit, allowing you to add changes again before committing.
Hard Reset
--hard resets the index and working tree. Any changes to tracked files in the working tree since the last commit are discarded:
Use this with caution as it completely removes all changes since the last commit, making it impossible to recover them unless they are backed up elsewhere.
2. Using git revert
If you want to undo a commit but it has already been pushed to a shared repository or you prefer to preserve the history of the change, consider using git revert. This command adds a new commit that undoes the changes introduced in a specific commit:
Here, <commit-hash> is the SHA hash of the commit you want to revert. This method is safe for shared history as it doesn’t alter the existing history.
Table: Summary of Commands
| Command | Use case | Effect on Working Directory | Effect on Staging Area | Safe for Shared History? |
git reset --soft HEAD~1 | Undo last commit, keep changes | No Change | Maintains changes | No |
git reset HEAD~1 | Undo last commit, unstaged changes | No Change | Unstages changes | No |
git reset --hard HEAD~1 | Undo last commit, discard changes | Discards changes | Discards changes | No |
git revert <commit-hash> | Create new commit undoing previous commit | No immediate effect | Ready to commit | Yes |
Additional Considerations
Checking Your Work Before Committing
It’s typically good practice to use git status or git diff to review your changes before committing them. This can prevent the need to cancel a commit.
What if the Commit is Already Pushed?
If you've already pushed your commit to a remote repository and need to cancel it, you'll need to use git revert or, if you are sure no one else has based work on your commit, git push --force after resetting. However, force pushing (--force) can disrupt other collaborators. Always communicate with your team when performing such actions.
Conclusion
Canceling a local git commit can be accomplished via resetting or reverting depending on your specific needs and whether the commit has been shared. Understanding how each command affects your commit history is crucial to managing your repository efficiently and collaboratively.

