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.
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.
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
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]
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]
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]
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. If you come across a Git merge conflict, make sure to read our article How to Resolve Merge Conflicts in Git.