How to Undo Unstaged Changes in Git Working Directory

In Git on 2~5 minutes
How to Undo Unstaged Changes in Git Working Directory

Git version controlling system lets you discard and undo mistakes that happen in several stages such as “working directory”, “stage/index”, “history” and “remote”. In this question, we are going to discard and undo changes in the working directory. In other words, discard the changes that are not yet staged in the repository. If you need to discard staged changes, refer to this post.

First, initiate a local Git repository with the git init command or use an existing repository that you have.

git init

Clean Newly Created Unstaged Files

Create a couple of sample files and add some content to them. If you need, you can use the following command for that. It will create a file called file.txt and will add “Test Content” to it. Repeat the command a few times with different file names to create a few files.

echo "Test Content" > file.txt

Now we call these files are “untracked”, “unstaged” and in the “working directory”. You can confirm it by running the git status command.

git status

Let’s say, you just accidentally created these files and now want to remove them all. We can easily undo such situations quickly with the git clean -df command. It will discard all the newly created files and directories in the working directory.

git clean -df

If you only need to remove some specific files, you can mention them like this.

git clean -df file1.txt file2.txt

After that, you can use the git status to check whether everything is cleaned and in its original state.

Discard Unstaged Changes Of Existing Files

Let’s say, this time you have changed some committed files in the repository and now need to undo those changes. For the demonstration, again create some sample files (you may use the earlier mentioned command to create files). Stage them using the git add . command.

git add .

Commit the files using the git commit command. We are using the -m to mention the commit message.

git commit -m "Add new files"

Now change some content in these committed files. Then run the git status to confirm whether there are modified files. After that, run the following command to clean and undo all the changes you made to files.

git checkout -- .

If you only need to discard some specific files, you can mention them like this.

git checkout -- file1.txt file2.txt

Alternatively, you can use the git reset command with --hard as well. It will discard and clean both staged and unstaged modifications of existing files in the repository.

git reset --hard