I'm on branch b4 and do "$ git rebase master", it gives me conflicts.
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: rebase: Modified 1.txt
Using index info to reconstruct a base tree...
M 1.txt
Falling back to patching base and 3-way merge...
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt
Failed to merge in the changes.
Patch failed at 0001 rebase: Modified 1.txt
The copy of the patch that failed is found in:
c:/hands_on/github/learn_git/cmd/.git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
Here, it shows that I'm NO longer on branch b4.
$ git status
# Not currently on any branch.
# You are currently rebasing.
# (fix conflicts and then run "git rebase --continue")
# (use "git rebase --skip" to skip this patch)
# (use "git rebase --abort" to check out the original branch)
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add <file>..." to mark resolution)
#
# both modified: 1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
I fixed conflicts and committed the changes:
$ vim 1.txt
$ git commit -a -m "Fixed rebase conflict"
[detached HEAD 2cb2672] Fixed rebase conflict
1 file changed, 1 insertion(+)
$ git status
# Not currently on any branch.
# You are currently rebasing.
# (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean
But when I tried "--continue", it does not complete rebase, but instead giving me more "instructions". Why?
$ git rebase --continue
Applying: rebase: Modified 1.txt
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
That's where you went wrong.
git rebase --continue
expects the changes to be in the index, but not yet committed. Since you already committed the changes,git rebase
's own attempt fails, because there are no changes left to be committed.You should be able to undo your commit action, without resetting the index, by running
git reset --soft @^
. Andgit rebase --continue
should work after that.You could alternatively use
git rebase --skip
to bypassgit rebase
's own attempt to commit the changes, but this risks a bit more getting messed up: your own commit will most likely not have respected the original commit's author name, email and time.The fact that
git status
shows you're not on any branch is not a problem.git rebase
intentionally detaches from the current branch until the operation finishes. This will be fixed up after the operations have succeeded.