Introduction

As a project management tool, Git allows users to queue a group of changes before they are committed to the project. This queue is called an index, and files may be removed before they are committed.

This guide will show you how to remove / Unstage files from the staging area in git.

tutorial on unstaging changes in Git

Prerequisites

  • An existing installation of Git
  • A Git project
  • A terminal window / command line
    • Linux:  Activities > Search > Terminal
    • Windows: right-click Start > Command prompt (or Windows PowerShell)

Unstage All Files on Git

To remove all changes from the staging index, enter the following command:

git reset

This will remove all changes from the staging area. It will not delete any files – the git add command can be used to re-add changes back into the staging index.

using $git reset to unstage all changes

The staging index is located at .git/index. It fits into the middle of the Git commit process:

      • Files are created or modified in during project development
      • Users decide which changes to publish together in the index by using the git add command
      • Users commit those changes under a name and description

The git reset command is used to wipe the index clean and add changes from scratch.

Unstage a Single File or Directory

The git reset command can be directed at a single file or directory.

For example, use the following command:

git reset location/of/file.ext
git reset directory/location

example of git reset command to remove all changes

Using the .gitignore File

The .gitignore file is a file that can be added to any directory in a project. It’s a simple text file, and anything added to it will not be staged or included in a commit.

Use a text editor to create a .gitignore file in a project directory. Then, edit the file and add the names of the assets to be excluded from commits.

For example, development log files don’t usually need to be included in a commit. These could be added by name to the .gitignore file.


Note: Unless there is a pressing reason, it’s best to create a single primary .gitignore file in the root directory of the project.


Unstage Committed Files

The git reset command can allow changes to files and directories that have already been committed.

The basic command to unstage a commit is the following:

git reset [option] [commit]

In [option] specify the type of reset being performed. In [commit] specify the name of the commit being reset.


Note: To unstage the last commit, use HEAD~1 as the name of the commit:

git reset ––mixed HEAD~1

Unstage Commmits Soft

Use the following command to perform a soft unstage:

git reset ––soft [commit]

using soft reset to return commited changes to the staging index

A soft reset has the following effects:

      • Updates the ref pointers
      • The staging Index is untouched
      • Working Directory is untouched

Note: For additional options for undoing Git commits, refer to Git Revert: How To Undo Last Commit.


Unstage Commits Hard

Use the following command to perform a hard unstage:

git reset ––hard [commit]

Using hard reset to return the index to the state before the last commit

A hard reset has the following effects:

      • Updates ref pointers to the specified commit
      • The staging index is reset to match the specified commit
      • Working Directory is reset to match specified commit
      • Any pending changes in the Working Directory and Staging Index are lost

Mixed Unstage Option

If no option is specified, the git reset command performs a mixed unstage:

git reset ––mixed [commit]

or

git reset [commit]

Using mixed reset to unstage the latest commit in Git

This has the following effects:

      • Updates the ref pointers
      • Resets staging index to the specified commit
      • Changes that are reverted from the staging index are moved to the working directory

Note: Hard resets are used frequently, but can cause lost work if used carelessly.


Conclusion

You should now have a solid understanding of how to unstage files in Git.

See our Git Commands Cheat Sheet for a comprehensive list of fundamental Git commands.


Next you should also read