Search code examples
gitgit-mergegit-resetgit-revert

Reset/revert a whole branch to another branches state?


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?


Solution

  • 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.