๐Ÿค–Save up to $132K/month in CI costs!Try Freeโ†’
Skip to main content

Deleting Git Commits

6 min read
DevOps Engineer, Former Frontend Engineer ๐Ÿ”ง
My focus is on automating workflows and making sure CI/CD pipelines run like a well-oiled machine.

This article was last updated on January 30, 2025, to include advanced techniques for safely deleting Git commits, managing multi-branch scenarios, recovering lost commits, and applying best practices for Git operations with clear examples and simplified explanations.

What is Git Commit Deletion and Why Use It?โ€‹

TL;DR

What is Git commit deletion?
Think of Git commits like saving checkpoints in a video game. Sometimes you need to go back to a previous save point and remove everything that happened after it. That's what deleting Git commits does - it lets you remove specific save points from your game's history.

Why delete Git commits?

  • Remove accidentally committed sensitive data
  • Clean up messy commit history
  • Start fresh from a specific point
  • Fix incorrectly committed changes

Warning: Like deleting save files, removing commits can be permanent! Always make a backup before proceeding.

I still remember the day I accidentally committed our production API keys to our public repository. That panic-inducing moment taught me the importance of knowing how to safely delete Git commits. Now, I'm here to share what I learned the hard way, so you don't have to!

Steps we'll cover:

How Git Commit Deletion Works: A Visual Guideโ€‹

Let me explain Git commit deletion with a simple analogy: imagine you're building with LEGO blocks. Each commit is like adding a new block to your structure. Sometimes you realize you used the wrong blocks and need to remove them. But here's the catch - removing a block from the middle might affect all the blocks above it!

Click to zoom

Try our interactive commit deletion simulator to understand how it works:

Git Commit Deletion Simulator

abc123Add user authentication
def456Fix styling issues
ghi789Update documentation
jkl012Add new feature

Step-by-Step Guide to Safely Delete Git Commitsโ€‹

Let me show you the different ways to delete commits, starting with the safest:

How to Delete Your Most Recent Git Commitโ€‹

This is like undoing your last LEGO block placement:

# Keep the changes but undo the commit
git reset --soft HEAD~1

# Delete both the commit and changes
git reset --hard HEAD~1

How to Remove Old or Specific Git Commitsโ€‹

This is trickier, like removing a block from the middle of your LEGO structure. Here's how I do it:

# Start interactive rebase
git rebase -i HEAD~3 # Look at last 3 commits

# In the editor, change 'pick' to 'drop' for commits you want to remove
pick abc123 Good commit
drop def456 Bad commit
pick ghi789 Another good commit

Working with Remote Git Repositories: Delete and Pushโ€‹

Now comes the scary part - dealing with remote repositories. I once had to delete a commit that was already pushed to our main branch. Here's what I learned:

# Force push the corrected history
git push origin main --force
warning

Force pushing is like using superglue with LEGO - it's powerful but potentially dangerous. Always:

  1. Notify your team before force pushing
  2. Make sure others have their work backed up
  3. Consider creating a backup branch first

Git Commit Deletion: Best Practices and Safety Tipsโ€‹

After breaking things a few times (okay, more than a few), here's what I've learned:

# Always use annotated tags for significant points
git tag 1.0.0

How to Recover Deleted Git Commits: A Complete Guideโ€‹

Even if you've "deleted" a commit, it's not always gone forever. Git keeps a secret logbook (called reflog) of everything you do. Here's how to use it:

# View your actions history
git reflog

# Restore to a specific point
git reset --hard HEAD@{1} # Go back one step

Advanced Git Commit Management: Multi-Branch Scenariosโ€‹

Sometimes you need to delete commits that affect multiple branches. This is like trying to remove a LEGO block that's supporting multiple structures. Here's how I handle these situations:

How to Delete Commits from Git Feature Branchesโ€‹

If you need to remove commits from a feature branch that was based on main:

# First, create a backup
git branch backup/feature-branch feature-branch

# Reset the feature branch to where it diverged from main
git checkout feature-branch
git reset --hard main

# Cherry-pick the good commits back
git cherry-pick abc123 # Pick specific commits you want to keep

Managing Git Commits in Merged Branchesโ€‹

If you need to remove commits that were already merged:

# Create a backup of the current state
git branch backup/main main

# Reset main to before the merge
git checkout main
git reset --hard HEAD~1 # Go back before merge

# Create a new merge commit without the unwanted changes
git merge --no-commit feature-branch
git reset HEAD . # Unstage all changes
git add -p # Selectively add the changes you want to keep
git commit -m "Merge feature-branch (cleaned)"

Git Recovery Guide: Fix Common Deletion Mistakesโ€‹

We all make mistakes. Here's how to recover from some common scenarios I've encountered:

Recover Lost Commits After Git Hard Resetโ€‹

If you accidentally did a git reset --hard:

# Check your reflog for the lost commit
git reflog

# Find the hash of your lost commit (e.g., abc123)
git reset --hard abc123

How to Restore Deleted Git Branchesโ€‹

Lost a whole branch? No problem:

# Find the last commit of your deleted branch in reflog
git reflog

# Create a new branch at that commit
git checkout -b recovered-branch abc123

Fix and Recover from Failed Git Rebaseโ€‹

If a rebase went wrong:

# Abort the rebase
git rebase --abort

# Use reflog to find a good stopping point
git reflog
Pro Tip

Always run git reflog expire --expire=now --all periodically to clean up old reflog entries, but only after you're sure you don't need them for recovery!

Conclusionโ€‹

Deleting Git commits is like performing surgery on your project's history - it's powerful but requires careful handling. Start with the safer options like git reset --soft before moving to more complex operations.

Remember: Just like in video games, always create a save point (backup branch) before attempting any dangerous operations. Trust me, your future self will thank you!

Need help monitoring your Git operations? Check out CICube for detailed analytics and best practices.