How to Delete Git Commit History Using git revert and git reset
This article explains why and how to remove unwanted Git commit history by using git revert to create a compensating commit, git reset to move the HEAD pointer, and git push --force to overwrite the remote repository, with step‑by‑step commands and safety tips.
The author, a senior architect, discovered an accidental commit that needed immediate removal from the remote repository to avoid exposing sensitive changes.
Why Delete Commit History
Accidental commits are visible to everyone in the remote repository; deleting them quickly prevents others from seeing the mistake.
Using git revert to Undo Commits
Purpose: git revert creates a new commit that reverses the changes of a previous commit while preserving history.
Syntax
Undo a single commit: git revert <commit-hash> Undo multiple commits:
git revert <commit-hash1> <commit-hash2> ...Undo the latest commit: git revert HEAD Undo a range of commits:
git revert <commit-hash1>^..<commit-hash2>After running git revert, Git opens the default editor (e.g., Vim) to edit the revert commit message; the user saves and exits, then pushes the new commit.
Using git reset to Remove Commits
Purpose: git reset moves the HEAD pointer and can modify the index and working tree, allowing you to discard commits entirely.
Syntax
Undo the last commit but keep changes staged: git reset --soft HEAD~1 Undo the last commit and unstage changes: git reset HEAD~1 Undo the last commit and discard all changes: git reset --hard HEAD~1 Move HEAD to a specific commit (discard later history): git reset --hard <commit-hash> In the example, the author resets the local branch two commits back with git reset HEAD~2, restoring the code to the state before the erroneous commits.
Force‑Pushing to Remote
Since the remote still contains the unwanted commits, the author overwrites the remote history with the cleaned local state using: git push --force or the explicit form: git push origin <branch-name> --force Important Tip: Using --force rewrites remote history and can be dangerous; ensure the local and remote codebases are compatible before proceeding.
Summary
git resetmoves the branch pointer and can modify history without creating a new commit, while git revert creates a new commit that undoes previous changes, preserving history. Combining git reset with git push --force allows complete removal of unwanted commits from both local and remote repositories.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Top Architect
Top Architect focuses on sharing practical architecture knowledge, covering enterprise, system, website, large‑scale distributed, and high‑availability architectures, plus architecture adjustments using internet technologies. We welcome idea‑driven, sharing‑oriented architects to exchange and learn together.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
