threads / bug / 47689

Bug, git rebase -i does not abort correctly

Subject: Bug, git rebase -i does not abort correctly

## tl;dr

4 messages between Jan 25, 2018 and Mar 13, 2018.

replies: 3people: 2as markdown or json

Duy Nguyen· Jan 25, 2018, 12:13 UTC · lore

rebase scripts are too much for me, so I'll play the user reporting bugs this time :)

Instead of doing
    $ git rebase -i --onto origin/master @~3
I sometimes accidentally type
    $ git rebase -i origin/master @~3
("rebase -i" is actually an alias, which is why I never forget to type -i)

Usually the todo list in $EDITOR shows noop, I realize my mistake and try to abort it by clearing the todo list before saving and closing $EDITOR. The problem is, HEAD is moved away anyway (to origin/master I think) even if rebase is supposed to abort the operation and leave HEAD untouched.

-- 
Duy
Kaartic Sivaraam· Jan 26, 2018, 07:50 UTC · re: Duy Nguyen · lore

Re: Bug, git rebase -i does not abort correctly

Hi,
On Thursday 25 January 2018 05:43 PM, Duy Nguyen wrote:
Show 12 quoted lines
> rebase scripts are too much for me, so I'll play the user reporting
> bugs this time :)
> 
> Instead of doing
> 
>     $ git rebase -i --onto origin/master @~3
> 
> I sometimes accidentally type
> 
>     $ git rebase -i origin/master @~3
> 
> ("rebase -i" is actually an alias, which is why I never forget to
type -i)
> 
> Usually the todo list in $EDITOR shows noop, I realize my mistake and
> try to abort it by clearing the todo list before saving and closing
> $EDITOR. The problem is, HEAD is moved away anyway (to origin/master
I
> think) 

For me it left HEAD at @~3. Reading the synopsis of `man git rebase` I could guess that the corresponding abstract form would be,

    $ git rebase -i <upstream> <branch>
> even if rebase is supposed to abort the operation and leave
> HEAD untouched.
> 
This might seem to be a bug as the comment in "git-rebase-todo" says,
    However, if you remove everything, the rebase will be aborted.
But "man git rebase" clearly says,
    If <branch> is specified, git rebase will perform an automatic "git
    checkout <branch>" before doing anything else. Otherwise it remains
    on
    the current branch.

Junio has previously confirmed that "git rebase [-i] <upstream> <branch>" is just a short hand for "git checkout <branch> && git rebase [-i] <upstream>".[ref 1] So, it's not surprising that it left HEAD at @~3 when you completely removed the contents of git-rebase-todo and exited the editor.

Does that help solve your issue?
[ref 1]: 
https://public-inbox.org/git/%3Cxmqqpo8387hz.fsf@gitster.mtv.corp.google.com%3E

--  Kaartic

QUOTE

“It is impossible to live without failing at something, unless you live so cautiously that you might as well not have lived at all – in which case, you fail by default.”

      - J. K. Rowling
WIKIPEDIA: DID YOU KNOW?
Only 33% of internet users in India have heard of Wikipedia !!
* What do you think could be the reason behind this?
* What are ways in which the awareness about Wikipedia in India and
other countries be increased ?
Reference:
* Give your ideas for increasing the awareness of Wikipedia in India
and
in other countries and get a Grant from the Wikimedia Foundation to
bring your idea to life.
  https://meta.wikimedia.org/wiki/Grants:IdeaLab/Inspire
* Know more about the awareness problem of Wikipedia
  https://meta.wikimedia.org/wiki/New_Readers/Awareness
  https://meta.wikimedia.org/wiki/New_Readers/Next_steps/Raising_awareness
-- 
Kaartic

Hi,

I seem to able to reproduce your issue. More comments inline.

On Thursday 25 January 2018 05:43 PM, Duy Nguyen wrote:
> rebase scripts are too much for me, so I'll play the user reporting
> bugs this time :)
> 
> Instead of doing
> 
>     $ git rebase -i --onto origin/master @~3
> 
> I sometimes accidentally type
> 
>     $ git rebase -i origin/master @~3
> 
> ("rebase -i" is actually an alias, which is why I never forget to type -i)
> 
> Usually the todo list in $EDITOR shows noop, I realize my mistake and
> try to abort it by clearing the todo list before saving and closing
> $EDITOR. The problem is, HEAD is moved away anyway (to origin/master I
> think) 

For me it left HEAD at @~3. Reading the synopsis of `man git rebase` I
could guess that the corresponding abstract form would be,

    $ git rebase -i <upstream> <branch>


> even if rebase is supposed to abort the operation and leave
> HEAD untouched.
> 

This might seem to be a bug as the comment in "git-rebase-todo" says,

    However, if you remove everything, the rebase will be aborted.

But "man git rebase" clearly says,

    If <branch> is specified, git rebase will perform an automatic git
checkout <branch> before doing anything else. Otherwise it remains on
       the current branch.
Surprisingly when git-rebase-todo's content is only a "noop" just
closing the editor without removing the contents also seems to be lying
as it checks
-- 
Kaartic

QUOTE

“It is impossible to live without failing at something, unless you live
so cautiously that you might as well not have lived at all – in which
case, you fail by default.”

      - J. K. Rowling


WIKIPEDIA: DID YOU KNOW?

Only 33% of internet users in India have heard of Wikipedia !!

* What do you think could be the reason behind this?

* What are ways in which the awareness about Wikipedia in India and
other countries be increased ?

Reference:

* Give your ideas for increasing the awareness of Wikipedia in India and
in other countries and get a Grant from the Wikimedia Foundation to
bring your idea to life.

  https://meta.wikimedia.org/wiki/Grants:IdeaLab/Inspire

* Know more about the awareness problem of Wikipedia

  https://meta.wikimedia.org/wiki/New_Readers/Awareness

  https://meta.wikimedia.org/wiki/New_Readers/Next_steps/Raising_awareness
Duy Nguyen· Jan 26, 2018, 09:24 UTC · re: Kaartic Sivaraam · lore

Re: Bug, git rebase -i does not abort correctly

On Fri, Jan 26, 2018 at 2:50 PM, Kaartic Sivaraam <kaartic.sivaraam@gmail.com> wrote:

Show 18 quoted lines
> This might seem to be a bug as the comment in "git-rebase-todo" says,
>
>     However, if you remove everything, the rebase will be aborted.
>
> But "man git rebase" clearly says,
>
>     If <branch> is specified, git rebase will perform an automatic "git
>     checkout <branch>" before doing anything else. Otherwise it remains
>     on
>     the current branch.
>
> Junio has previously confirmed that "git rebase [-i] <upstream>
> <branch>" is just a short hand for "git checkout <branch> && git rebase
> [-i] <upstream>".[ref 1] So, it's not surprising that it left HEAD at
> @~3 when you completely removed the contents of git-rebase-todo and
> exited the editor.
>
> Does that help solve your issue?

Sort of. It smells bad design to me when a mistake can easily become a feature. But with your help, I think I should be able to disable this feature on my local build. Thanks.

-- 
Duy
Kaartic Sivaraam· Mar 13, 2018, 18:26 UTC · re: Duy Nguyen · lore

Re: Bug, git rebase -i does not abort correctly

On Friday 26 January 2018 02:54 PM, Duy Nguyen wrote:
Show 5 quoted lines
> 
> Sort of. It smells bad design to me when a mistake can easily become a
> feature. But with your help, I think I should be able to disable this
> feature on my local build. Thanks.
> 

In case you're still facing this issue, it just struck me recently that you could have a different alias for 'git rebase -i --onto'. In which case you could possibly avoid falling prey to the syntax issue ;-) Something like,

	$ git config alias.rio 'rebase -i --onto'
-- 
Kaartic

QUOTE
---

“The most valuable person on any team is the person who makes everyone
else on the team more valuable, not the person who knows the most.”

      - Joel Spolsky

← back to recent threads