Reputation: 34285
To track down at which point I broke a feature in my software, I need to review older versions of my repository. I just want to set the working directory to an older commit, play with the code, afterwards discard the changes, and then try another commit.
I do not want to change anything about commits, neither remove nor create ones. I tried using git reset
but after that newer commit weren't shown anymore. So I downloaded the repository again, because I didn't know how to revert that.
Upvotes: 29
Views: 16194
Reputation: 1277
You can checkout the code in another branch to the index by using the following:
git checkout my-other-branch .
The dot is a path specifier indicating you want to do this for the entire repository. You could likewise specify only a specific folder. Technically, you can specify any 'tree-ish' specifier for the my-other-branch
parameter, such as a tag, a commit hash, something like HEAD~1
, ect... If you want these changes to be unstaged, you could then do:
git reset HEAD
Assuming you began in a clean state, you'll now have your working directory be in the same state as my-other-branch
.
Upvotes: 12
Reputation: 1312
Using git checkout <branch_name>
you can switch to the other available branch. If you want to reset your HEAD
to the older commit, you can try the following command :
Also if you have the commit, then you can try this command : git reset --hard <commit>
In this way you can set the working directory to an older commit.
To completely discard the changes you can try : git reset --hard
which will clean your directory to the previous commit.
Upvotes: 4
Reputation: 1330012
A simple git checkout old-sha1
can be a start, but the real command for that kind of task is:
Find by binary search the change that introduced a bug
If you have a script able to test if your working tree "works" or not, you can execute that script on previous commits through git bisect
, locating the first commit which breaks your test.
Note that this command isn't yet supported directly by GitHub for Windows: you will have to open a shell.
A git checkout
would leave you in a detached HEAD, which doesn't matter since you won't make any modification.
To get back to were you were, checkout a branch:
git checkout master
See "Why did git detach my head?".
Upvotes: 22