How to Uncommit a File in Git: A Practical Guide

Have you ever accidentally committed the wrong file to your Git repository? Whether it’s a sensitive config file, a large binary, or just a mistake, Git makes it possible to uncommit a file—with several options depending on your workflow.

In this blog post, we’ll break down how to uncommit a file in Git, covering both local and pushed commits.


🔁 What Does “Uncommit” Mean?

“Uncommitting” a file typically refers to removing a file from the most recent commit while preserving the rest of the commit or your working state. Git doesn’t have a direct git uncommit command, but a combination of commands lets you achieve the same result.


✅ Scenario 1: File Committed but Not Pushed

If you haven’t pushed the commit to a remote repository yet, you can safely amend the commit.

✏️ Option A: Uncommit the File But Keep Its Changes

git reset --soft HEAD~1
git restore --staged <filename>
git commit -m "Updated commit without unwanted file"

What this does:

  • git reset --soft HEAD~1 undoes the last commit but keeps changes staged.
  • git restore --staged unstages the file.
  • You then recommit only the files you want.

🧹 Option B: Uncommit and Discard the File’s Changes

If you don’t want to keep the file’s changes at all:

git reset HEAD~1
git restore <filename>
git commit -m "Recommit without unwanted file"

Caution: This removes the file’s changes from both the commit and your working directory.


☁️ Scenario 2: File Committed and Already Pushed

If the commit has been pushed to a shared remote repository (e.g., GitHub), you should not rewrite history unless you’re certain no one else is working on the same branch.

✔️ Option A: Revert the Commit

This is the safest way to undo a change on a shared branch.

git revert <commit-hash>

Then manually remove the file and commit again if needed.

❗ Option B: Force Push (Not Recommended for Shared Branches)

If you must rewrite history (e.g., to remove a sensitive file), and you’re aware of the risks:

git reset --soft HEAD~1
git restore --staged <filename>
git commit -m "Updated commit without sensitive file"
git push --force

Warning: Force pushing can overwrite history and disrupt teammates’ work. Use only when absolutely necessary.


🔐 Bonus: Remove a File from Git History (e.g., secrets or large files)

If you committed a sensitive file and need to remove it from the entire history:

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch <filename>" \
  --prune-empty --tag-name-filter cat -- --all

Or use the safer, modern tool:

npx git-filter-repo --path <filename> --invert-paths

Then force push:

git push origin --force --all

Pro Tip: Always back up before using history-rewriting commands.


🧠 Summary

SituationRecommended Action
Unpushed commitUse git reset + git restore --staged
Pushed commitUse git revert (safe) or git reset + push --force (risky)
Sensitive file in historyUse git filter-branch or git-filter-repo

🧪 Final Thoughts

Uncommitting a file in Git may sound intimidating, but with the right tools and commands, it becomes straightforward. Whether you’re cleaning up local commits or handling sensitive data, Git gives you flexible ways to correct your mistakes.

Always consider the impact of rewriting commit history—especially on shared repositories—and when in doubt, create a backup branch.

Sharing Is Caring:

Leave a Comment