Git: 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?

  • reverting push'd git commit
  • Is there a difference between re-adding a file manually or using git revert?
  • Cant git push to master after revert
  • Git Reverting a big PUSHed file
  • Is there a difference between git reset --hard HEAD and git checkout .?
  • git revert back to certain commit
  • Git - removing a commit
  • git: merge back in what I merged out
  • 2 Solutions collect form web for “Git: reset/revert a whole branch to another branches state?”

    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 of A is copied to .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.

    If you want your branch B to look exactly like branch A. You could just do a reset --hard

    git checkout branch-B
    
    git reset --hard branch-A
    

    Be careful you will lose commits in this case. Your branch-B will look exactly like branch-A, whatever commits were made to branch-B, that were not present in branch-A, will be lost. Also if branch-B is shared with other people, its not recommended to perform this operation.

    In that case you could try reverting the commits you don’t want in branch-B

    git revert <sha-of-"some other commit">
    git revert <sha-of-"merge of other stuff from branch C (into branch B)"> 
    

    The second commit looks like a merge commit so you might have to pass the parent as well.

     git revert <sha-of-"merge of other stuff from branch C (into branch B)"> -m1
    
    Git Baby is a git and github fan, let's start git clone.