Reset/revert a whole branch to another branches state?

daniel451 picture daniel451 · Feb 27, 2015 · Viewed 22.9k times · Source

I have a branch A and a branch B (and some other branches).

Lets say A's commit history looks like:

  • commit 5
  • commit 4
  • commit 3
  • ...

And B's commit history:

  • some other commit
  • commit 4
  • merge of other stuff from branch C (into branch B)
  • commit 3
  • ...

Basically what I want is to "delete" all changes made by the commits some other commit and merge of other stuff from branch C to branch B.

I want the working tree of branch B to be exactly the same like branch A's working tree.

How do I achieve this?

Answer

Rüdiger Herrmann picture Rüdiger Herrmann · Feb 27, 2015

One way to achieve this is through git reset. While on branch B execute

git reset --hard A

Thereafter, branch B points to the head-commit of A. The --hard option resets the index and working tree so that all tracked files are reset to the version in branch A. The old HEAD commit-ID of A is stored in .git/ORIG_HEAD in order to allow undoing the change.

Alternatively - while not on branch B - you can delete branch B and re-created it like this:

git branch -d B     # delete branch B
git branch B A      # re-create branch B and let it point to the commit of branch A

Other than the first suggestion, this will leave the index and working tree untouched.