This is similar to my another question ( Switch to another branch without changing the workspace files ) but solution that worked there, doesn’t work now.
I needed to remove some changes, which were long time ago pushed to remote master. So I don’t want to remove commits from master, but I want to change the files just like these changes were reverted. So I did this:
- While on master,
git branch limits git checkout limitsgit rebase --interactive <commit before the ones I wanted to remove>- in interactive console I removed the commits with changes I wanted to revert
So now in limits I have the code like I’d like it in master. How can I “move” it to master? With the code from limits I’d like to change to master branch, but without changing any file in workspace, so I can then commit the changes as a new change to master.
Rather than use interactive rebase, you can just revert each commit that you don’t want. When you use
git revert <object-name-of-commit>, git will introduce a new commit that backs-out the change introduced by the one you name. So, suppose that the commits you want to remove areabc123anddef456, you can just do:However, if it was a lot of work to find those commits, and you’re happy with the tip of
limits, you can just create a new commit onmasterthat contains the state of the tree from there. Firstly, make sure thatgit statusis clean, since you’re going to usegit reset --hard, and that will wipe out uncommited changes:That recipe is a variation of one in this question: