13

I read on here and searched a lot but didn't find the answer, so Is there a way to switch between commits like you do with branches.Let's say I have these commits: a;b;c where c is my last commit, can I switch back to commit a? Or you have to do a git diff and modify the files manually?

Martin Geisler
  • 72,968
  • 25
  • 171
  • 229
Uffo
  • 9,628
  • 24
  • 90
  • 154
  • 1
    A branch _is_ a commit (with a symbolic name, but a commit nevertheless) – fge Jan 07 '12 at 22:00
  • 1
    possible duplicate of [How can I switch my git repository to a particular commit](http://stackoverflow.com/questions/4940054/how-can-i-switch-my-git-repository-to-a-particular-commit) –  Jul 20 '13 at 20:18

3 Answers3

14

Just type git checkout a. Or perhaps more usefully, git checkout -b mybranch a, to checkout a as a new branch mybranch.

If you want to revert b and c, you can use git revert, or to remove them entirely from your current branch's history, you could git rebase -i a and throw them out.

Even if you were going to use git diff, you wouldn't have to do anything manually. Check out git format-patch, git apply, and git am to automate creating and applying patches.

Carl Norum
  • 219,201
  • 40
  • 422
  • 469
4

You can create a branch from the revision you want to work from. The revision number can be seen using

   git log

Branch out from the previous revision

 git branch -f branchname rev
Shraddha
  • 2,337
  • 1
  • 16
  • 14
  • This is good just in case you have created branches, but not when you have only the master branch and you want to switch between commits I guess – Uffo Jan 07 '12 at 19:35
  • You can force your master branch to point to older revision. Use the master as the branchname – Shraddha Jan 07 '12 at 19:44
1

git uses the definition of a commitish. git defines a commitish as:

commit-ish

Indicates a commit or tag object name. A command that takes a commit-ish argument ultimately wants to operate on a commit object but automatically dereferences tag objects that point at a commit.

This seems slightly incomplete as branches are also often treated as commit-ish.

Basically, you can checkout anything that has a sha-1 hash.

Bill Door
  • 18,272
  • 3
  • 32
  • 37