git rebase --continue no changes

Paul picture Paul · Dec 10, 2015 · Viewed 13.1k times · Source

I have two branches with two features: banch_1 and branch_2. branch_2 uses feature from branch_1. I've made changes in the branch_1 and want to rebase branch_2 on branch_1 to get changes from branch_1 into branch_2.

So, I'm checking out on branch_2:

git checkout branch_2

And trying to rebase on branch_1:

git rebase branch_1

After that I get 'Merge conflict' for two files. So I run

git mergetool -t meld

and resolving that conflicts, choosing changes from branch_1.

I'm saving files and going to terminal, typing git status and see that there is no changes in git index. Next I run git rebase --continue and getting

No changes - did you forget to use 'git add'? 

error. But there is nothing to add! I type git log and see commit from branch_1 but there is no commit from branch_2.

What I'm doing wrong?

Answer

DaveyDaveDave picture DaveyDaveDave · Dec 10, 2015

If I understand correctly, when you're getting the merge conflict, you're accepting all the changes from branch_1, meaning that that particular commit from branch_2 is irrelevant - any changes in that commit are identical to the incoming changes from branch_1.

When git is saying

No changes - did you forget to use 'git add'?

it's telling you that the commit you're trying to apply doesn't make any changes to the repo, and therefore there's no reason for it to exist.

The simple solution to that is git rebase --skip, which just says "ignore this commit and move on" as suggested in @C-Otto's comment. This will skip the commit you're currently dealing with, and move on to subsequent ones.

You might also find it easier to use interactive rebasing (git rebase -i), which first presents you with a list of the commits it will apply, and gives you various options for what to do with each individual commit. In this case, if you identify a commit that is no longer relevant, you can skip it up-front, so you'll never see the conflict in the first place.