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:

  • How to go to previous commits in eclipse and egit
  • Heroku push master ssh problem
  • Gerrit push not working. Remote rejected, prohibited by gerrit
  • .gitignore fails to ignore a file
  • IntelliJ Idea: Git branches view with multiple projects
  • Sudo git as another user with ssh-agent for key access
    • 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?

  • How to merge only once when master branch diverged?
  • git subtree push and split adding “-n<newline>” to commit messages
  • bower init command error (gitbash) in windows
  • Vim: Show current git branch in lightline status line without fugitive
  • Why do we create a new user for programs (like git) when we install git on a Linux server?
  • Tagging steps for a tutorial?
  • 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.