astrogirl
astrogirl

Reputation: 163

using git reset on master when I've been merging back and forth with a local branch

I've been making changes in a local branch branch_a. I thought these changes would need to be merged into the master, so I merged into my local master. I then carried on working in branch_a, occasionally pulling into my local master the most recent updates from other ppl and then merging those into branch_a.

Now it turns out they don't want those changes from branch_a in master. How do I revert my master back to it's original state a couple of months ago (my result of the merge from branch_a are committed but not pushed). I can't reset can I because my local branch branch_a is dependent due to the merging from master (although I only want the changes from the remote master branch, I've not really much anything in my local master - nothing I want to keep anyway - it's just stuff after I merged the other branch in to get it working nice). Can I rebase branch_a to remove the dependency on my local master branch, then reset? Or should I use revert so the history is not deleted? (Basically I don't want master to get messy with my local merging and tiny fixes I did after the merge).

Upvotes: 1

Views: 176

Answers (1)

ralphtheninja
ralphtheninja

Reputation: 133238

You can do this in a number of different ways. Of course you can reset your master branch. To get rid of your merged branch_a into master you could:

git fetch origin
git checkout master
git reset --hard origin/master

Since you havent pushed your merged branch_a changes this will make your master point to current remote master which will be stripped of changes from branch_a.

Now, assuming you want to keep branch_a but without the merged changes from master, you can rebase that branch interactively and simply delete the merge commits.

git checkout branch_a
git rebase -i HEAD~20 (assuming 20 commits back in history)

This will start up an editor where you can do various things and will look something like this:

pick 23kasjd foo
pick sjd3456 goo

Simply remove the lines that are merge commits coming from master and save. The rebase will continue and branch_a history will be rewritten and omit these commits from the history.

Upvotes: 1

Related Questions