# Bug after removing a local branch and restore the remote branch during a rebase

2 messages from 2015-09-17 to 2015-09-17. Participants: Robert Strobl, Jacob Keller.
Thread: https://gitlist.dev/t/40368

## Robert Strobl, 2015-09-17 10:12

Subject: Bug after removing a local branch and restore the remote branch during a rebase
Message-ID: <CF93B86B-8CCF-483D-918A-47C910CEE8BA@surialabs.com>
URL: https://gitlist.dev/e/CF93B86B-8CCF-483D-918A-47C910CEE8BA%40surialabs.com

```
It might be an unusual workflow, however it leads to a bug:

git checkout feature_branch
git rebase master

# a couple of conflicts occur, which I don’t want to fix. there is an updated version on origin
# so I’d like to go with that one

git add .
git stash
git checkout master
git branch -D feature_branch
git pull
git checkout feature_branch
git status

# On branch feature_branch
# You are currently rebasing branch ‘feature_branch' on '195269d'.
#  (all conflicts fixed: run "git rebase --continue")

# nothing to commit, working directory clean

# It still thinks that I’m rebasing the branch, so let’s try:

git rebase —abort

# On branch feature_branch
# Your branch and ‘origin/feature_branch' have diverged,
# and have 104 and 77 different commits each, respectively.
#  (use "git pull" to merge the remote branch into yours)
# nothing to commit, working directory clean

I’m aware that I should have aborted the rebase and then fetch the remote branch.
However, I still think that when I delete a local branch, it should also abort the rebase that is attached to it.

I hope you find that useful. If it makes sense, I would be happy writing a patch for it :)

Cheers,
Robert
```

## Jacob Keller, 2015-09-17 16:44

Subject: Re: Bug after removing a local branch and restore the remote branch during a rebase
Message-ID: <CA+P7+xpKQasAQ3Qx4bbQWX7N4kQqknKGW7Xei6xCNEY=p7CraA@mail.gmail.com>
URL: https://gitlist.dev/e/CA%2BP7%2BxpKQasAQ3Qx4bbQWX7N4kQqknKGW7Xei6xCNEY%3Dp7CraA%40mail.gmail.com
In-Reply-To: <CF93B86B-8CCF-483D-918A-47C910CEE8BA@surialabs.com>

```
Hi,

On Thu, Sep 17, 2015 at 3:12 AM, Robert Strobl
<robert.strobl@surialabs.com> wrote:
> It might be an unusual workflow, however it leads to a bug:
>
> git checkout feature_branch
> git rebase master
>

Ok so you are performing the rebase...

> # a couple of conflicts occur, which I don’t want to fix. there is an updated version on origin
> # so I’d like to go with that one
>
> git add .
> git stash
> git checkout master
> git branch -D feature_branch
> git pull
> git checkout feature_branch
> git status
>

So you delete the branch, but the rebase stores the branch it's
working on by name, *and* you then re-create the branch again by "git
checkout feature_branch"

> # On branch feature_branch
> # You are currently rebasing branch ‘feature_branch' on '195269d'.
> #  (all conflicts fixed: run "git rebase --continue")
>
> # nothing to commit, working directory clean
>
> # It still thinks that I’m rebasing the branch, so let’s try:


You are still rebasing.

>
> git rebase —abort
>
> # On branch feature_branch
> # Your branch and ‘origin/feature_branch' have diverged,
> # and have 104 and 77 different commits each, respectively.
> #  (use "git pull" to merge the remote branch into yours)
> # nothing to commit, working directory clean
>
> I’m aware that I should have aborted the rebase and then fetch the remote branch.
> However, I still think that when I delete a local branch, it should also abort the rebase that is attached to it.
>

So what happened here is the rebase --abort tries to return you to the
starting situation when you began the rebase. Normally if you change
the current checked out branch to a new one, ie: git checkout master,
it will say "not returning to ORIG_HEAD"... however... you are on the
same branch name, thus rebase --abort returns you to your position.

> I hope you find that useful. If it makes sense, I would be happy writing a patch for it :)
>

I don't think anything needs to happen. You admit that you should have
run "git rebase --abort" first. Second, you actually re-create the
same branch name again...

After fixing up the rebase --abort, just perform a git reset to fix
your tree where you want it.

In fact I prefer current behavior which has lower risk of lost work,
since abort puts you back to where you were before... I don't think
that supporting "I deleted a branch" makes sense here.

a) there is an easy known practice for this flow... rebase --abort first

b) there is an easy fix after you rebase --abort late: git reset --hard master

Between these two things I don't think we should change rebase to stop
recovering the history.

Regards,
Jake

> Cheers,
> Robert--

```
