Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 462
daniel451 Avatar asked Feb 27 '15 21:02

daniel451


People also ask

Does git reset affect other branches?

These forms reset the index entries for all paths that match the <pathspec> to their state at <tree-ish> . (It does not affect the working tree or the current branch.)

How do I revert to a previous state in git?

git reset --hard This command reverts the repo to the state of the HEAD revision, which is the last committed version. Git discards all the changes you made since that point. Use the checkout command with two dashes, then the path to the file for which you want to revert to its previous state.


2 Answers

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.

like image 72
Rüdiger Herrmann Avatar answered Sep 23 '22 12:09

Rüdiger Herrmann


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 
like image 40
pratZ Avatar answered Sep 20 '22 12:09

pratZ