DEV Community

Cover image for Git and GitHub: How to Revert a Single File.

Git and GitHub: How to Revert a Single File.

Joseph Trettevik on June 14, 2020

Song of the Week Introduction Once you start collaborating with other developer it's going to be important to know how to...
Collapse
 
gerrytan profile image
Gerry Tan

In most cases you want to checkout to the commit before the most recent ones. So the command should be:

git checkout [commit ID]~1 -- path/to/file

~1 here is reference to the commit's first parent, more info.

Collapse
 
connor11528 profile image
Connor Leech

You can also leave the commit hash out, to for instance go back to the most recent commit (the HEAD):

git checkout -- path/to/your/file
Enter fullscreen mode Exit fullscreen mode
Collapse
 
zirkelc profile image
Chris Cook
git show some_commit_sha1 -- some_file.c | git apply -R
Enter fullscreen mode Exit fullscreen mode

stackoverflow.com/a/7196615/1967693

Collapse
 
d2clon profile image
Fernando Guillen

yes!

Collapse
 
peterhenry9999 profile image
Peter Henry

I'm trying this, and all is great...until the last step of trying to push. I get this error,
fatal: You are not currently on a branch (but I am, I can clearly see I'm on the branch that has the commit hash as stated above)
To push the history leading to the current (detached HEAD)
state now, use
git push origin HEAD:

and when I do that....
! [rejected] HEAD -> name of my branch <non-fast-forward)
error: failed to push some reds to 'bitbucket.org/company/more paths'

The red errors with fail and rejected is not confidence inspiring. What am I doing wrong?

Collapse
 
radley112 profile image
radley112

Takeaways: @geometry dash
Find the commit ID of the version of the file you want to revert to.
Find the path to the file you want to revert from the working directory.
In the terminal, change directories to the working directory.
Type git checkout [commit ID] -- path/to/file and hit enter.
Commit the change to the reverted file.
(this is the first result i found)

Collapse
 
misterdigital_ profile image
Javier Trujillo (Misterdigital)

This article is a lifesaver for anyone who's ever needed to revert a single file in a Git repository! The step-by-step guide is clear and easy to follow, making it accessible even for those who are relatively new to Git. The explanation of the git checkout command and how it can be used to restore a specific file to a previous state is particularly valuable. It's also great to see the inclusion of practical examples and the mention of potential pitfalls, such as ensuring you don't accidentally overwrite changes. Thanks for sharing this useful tip!

Collapse
 
shahjapan profile image
Japan Shah

Thanks @lofiandcode for the nice article - I directly jumped to Takeaways section and it worked.

Collapse
 
d2clon profile image
Fernando Guillen

It doesn't work if the file is deleted:

error: pathspec 'my/file/path' did not match any file(s) known to git
Enter fullscreen mode Exit fullscreen mode
Collapse
 
pradeepkatiyar007 profile image
pradeepkatiyar007

So, while the guide focuses on a specific task, the underlying techniques offer a powerful way to explore and navigate the history of your code, like a developer's own time machine!

Wonderful for OST vs PST!

Collapse
 
nathan-wells profile image
Nathan wells

In the world of version control, mistakes happen. Fortunately, Git offers several ways to revert changes, including reverting a single file. This article will guide you through two methods to revert a single file in Git and GitHub:

1. Using Git Checkout:

This approach allows you to revert to a specific commit for a single file.

Steps:

  1. Find the commit ID of the version you want to revert to.
  • Use git log to view the commit history of the file.
  • Navigate to your local repository.

  • Run the command: git checkout [commit ID] --

  • Replace [commit ID] with the actual commit ID you found.

  • Stage the changes: git add

  • Commit the changes: git commit -m "Revert changes to "

  • Push your changes to GitHub: git push origin HEAD

2. Using Git Reset:

This method allows you to discard changes made to a single file and revert it to the state in the working directory or the index.

Steps:

  • Navigate to your local repository.

  • Run the command: git reset HEAD
    This resets the file to the state in the HEAD commit.

  • Alternatively, to revert to the state in the index: git reset HEAD^

  • Stage the changes: git add

  • Commit the changes: git commit -m "Revert changes to "

  • Push your changes to GitHub: git push origin HEAD

Remember:

  • Always back up your repository before making any significant changes.

  • Consider using a commit message that clearly describes the revert action.

  • These methods only revert changes locally. You need to push your changes to GitHub to reflect them on the remote repository.

Additional Resources:

Git documentation on checkout: git-scm.com/docs/git-checkout
Git documentation on reset: git-scm.com/docs/git-reset
GitHub Help article on reverting commits: docs.github.com/en/desktop/managin...
By understanding these methods, you can easily revert changes to a single file in Git and GitHub, ensuring your code base remains clean and reflects your desired state as shoviv.

Collapse
 
viniciusrio profile image
Vinicius Rio

Simple and useful! Thanks

Collapse
 
rajarajacholank profile image
Rajarajacholan

You nailed it, it works well! So much details yet essential. Appreciate your passion and patience!!!

Collapse
 
mandyedi profile image
Ed Ward Coding

The new commit can be avoided with amend or squash.
E.g. If I revert a file from the last commint I just

git commit --amend
Enter fullscreen mode Exit fullscreen mode

after the checkout.

Collapse
 
jodoesgit profile image
Jo

This is good know-how. Thank you Joseph!

Going to bookmark it, and keep the knowledge of the possibilities in my brain bin.

Collapse
 
victoreijkhout profile image
Victor Eijkhout

Please proofread. Second sentence "you're" s/b "your". Last sentence of that paragraph "what" s/b "way". Et cetera.

Collapse
 
Sloan, the sloth mascot
Comment deleted