DEV Community

Geoffrey Kim
Geoffrey Kim

Posted on

Reverting File Changes in Git: A Comprehensive Guide

As developers, we often find ourselves in situations where we need to revert file changes in our Git repository. Whether you've made some changes that you no longer want or you've accidentally staged or committed something by mistake, knowing how to revert these changes is essential. In this blog post, we'll explore various Git commands that help you revert file changes, depending on different scenarios.


Scenario 1: Reverting Uncommitted Changes

Reverting Changes to a Specific File

If you've modified a file but haven't yet staged or committed the changes, you can easily revert it to the last committed state using:

git checkout -- <filename>
Enter fullscreen mode Exit fullscreen mode

For example:

git checkout -- path/to/your/file.js
Enter fullscreen mode Exit fullscreen mode

This command discards any changes in the specified file since the last commit.

Reverting Changes to All Files

To revert changes in all files in your working directory, use:

git checkout -- .
Enter fullscreen mode Exit fullscreen mode

This command will discard all uncommitted changes in the repository.

Scenario 2: Reverting Staged Changes

Reverting Changes to a Specific Staged File

If you've already staged changes and want to unstage them, use:

git reset HEAD <filename>
Enter fullscreen mode Exit fullscreen mode

For example:

git reset HEAD path/to/your/file.js
Enter fullscreen mode Exit fullscreen mode

This command unstages the changes but leaves the working directory unchanged.

Reverting Changes to All Staged Files

To unstage changes for all files:

git reset HEAD .
Enter fullscreen mode Exit fullscreen mode

This command unstages all staged changes without modifying the working directory.

Scenario 3: Reverting Committed Changes

Reverting the Last Commit (Keeping Changes in Working Directory)

If you've committed changes but want to undo the commit while keeping the changes in your working directory, use:

git reset --soft HEAD~1
Enter fullscreen mode Exit fullscreen mode

This command removes the last commit but leaves your changes staged.

Reverting the Last Commit (Unstaging Changes and Keeping Them in Working Directory)

To undo the last commit and unstage the changes, use:

git reset HEAD~1
Enter fullscreen mode Exit fullscreen mode

This command removes the last commit and unstages the changes, leaving them in your working directory.

Reverting the Last Commit (Deleting Changes)

To completely undo the last commit and delete all changes, use:

git reset --hard HEAD~1
Enter fullscreen mode Exit fullscreen mode

Be cautious with this command as it permanently deletes changes from your working directory.

Scenario 4: Reverting to a Specific Commit

Reverting to a Specific Commit (Deleting Changes)

If you want to revert your repository to a specific commit and delete all changes made after that commit, use:

git reset --hard <commit-hash>
Enter fullscreen mode Exit fullscreen mode

For example:

git reset --hard a1b2c3d4
Enter fullscreen mode Exit fullscreen mode

Reverting to a Specific Commit (Keeping Changes in Working Directory)

To revert to a specific commit but keep changes in your working directory, use:

git reset <commit-hash>
Enter fullscreen mode Exit fullscreen mode

For example:

git reset a1b2c3d4
Enter fullscreen mode Exit fullscreen mode

This command reverts your repository to the specified commit while preserving changes made after that commit in your working directory.

Using the New git restore Command

Git has introduced a more intuitive command for restoring changes:

Reverting Changes to a Specific File

git restore <filename>
Enter fullscreen mode Exit fullscreen mode

Reverting Changes to All Files

git restore .
Enter fullscreen mode Exit fullscreen mode

These commands function similarly to git checkout -- <filename> and git checkout -- ., respectively, and are the preferred method in newer versions of Git.


Understanding how to effectively revert changes in Git can save you a lot of headaches. Whether you're undoing uncommitted changes, unstaging files, or resetting to a previous commit, these commands will help you maintain control over your version history. Remember to use commands like git reset --hard with caution, as they can permanently delete changes. Happy coding!

Top comments (1)

Collapse
 
sawyerwolfe profile image
Sawyer Wolfe

Thank you, this guide is super helpful for navigating Git! One question though: What do you recommend as best practices to avoid accidentally using git reset --hard and losing important changes?