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).
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:
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.
This will start up an editor where you can do various things and will look something like this:
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.