Live streamJoin us for "State of code review 2024" on July 18thRegister today

How to unstage files in Git

Greg Foster
Greg Foster
Graphite software engineer


Note

This guide explains this concept in vanilla Git. For Graphite documentation, see our CLI docs.


Unstaging files in Git allows you to remove work from the “staging area” without discarding any changes made to the files themselves. The changes will remain in your working directory, allowing you to continue working on them or stage them again later.

The staging area is where Git stores files and their changes before committing them to your Git project's history. The working directory on the other hand is where all of your files are stored on your local machine. Sometimes, you may stage files by mistake or decide later they you don’t want to commit them yet. This guide will cover how to unstage files, whether you're working with a single file, multiple files, or even every file in your project’s directory

  1. Unstaging a single file: To unstage a specific file, use the git reset command followed by the file path:

    git reset <file-path>

    This command will remove the specified file from the staging area, but the changes to the file will still exist in your working directory, so you won’t lose any work.

  2. Unstaging all files: If you want to unstage all files, you can use the git reset command without specifying a file path:

    git reset

    This will remove every file from the staging area. Again, the changes will not be lost; they will simply be removed from the index and remain in your working directory.

  • Options when unstaging a file: The git reset command can be used with different options for more control:

    • Soft reset (--soft): This option moves the HEAD pointer to a specified commit but does not alter the staging area or the working directory. This means that any changes you've made that were staged or committed after the specified commit will be left in the staging area, ready to be committed again. This doesn’t actually “unstage” anything.

    • Mixed reset (default): The default behavior of git reset without any options is a mixed reset. It unstages your changes, by resetting the staging area to match a specified commit, but leaves the working directory untouched. Your local work will remain untouched.

    • Hard reset (--hard): This resets your staging area and working directory. This is a destructive command and any changes to tracked files in the working directory since the last commit will be discarded. Use this with caution.

  • Review changes before unstaging: Use git status to review which files are staged before deciding to unstage. This helps prevent accidental loss of important changes.

  • Commit often: Regular commits with clear, descriptive messages make it easier to manage changes and understand the history of your project.

  • Stash changes: If you're unsure about committing or unstaging, consider using git stash to temporarily shelve changes. This clears both your working directory and staging area without losing your modifications. To bring stashed changes back to the working directory you can run git stash pop

Unstaging files in Git allows you to make additional modifications to the changes you include in a commit, ensuring your project's history is clean and meaningful. Whether you're correcting a mistake or reconsidering what changes to commit, git reset provides the flexibility to manage your staging area effectively. By default, unstaging changes with git reset keeps your work in the working directory, so you can continue to edit or stage it as needed.

Stay unblocked. Ship faster.
Experience the new developer workflow - create, review, and merge code continuously. Get started with one command.
Get started

Give your PR workflow
an upgrade today

Stack easier | Ship smaller | Review quicker

Or install our CLI.
Product Screenshot 1
Product Screenshot 2