threads / discuss / 31044

git rebase -i does not rebase if all lines are removed

Subject: git rebase -i does not rebase if all lines are removed

## tl;dr

3 messages between Jul 17, 2012 and Jul 17, 2012.

replies: 2people: 3as markdown or json

Orgad and Raizel Shaneh· Jul 17, 2012, 10:46 UTC · lore
Make a commit on top of master.
git rebase -i origin/master
Remove the commit.
Git prints "Nothing to do" and does not rebase.

Running 'git rebase -i' when there are no local commits has 'noop' in the first line, and with it the rebase is successful. Why is this 'noop' mandatory?

- Orgad
Carlos Martín Nieto· Jul 17, 2012, 10:55 UTC · re: Orgad and Raizel Shaneh · lore

Re: git rebase -i does not rebase if all lines are removed

On Tue, 2012-07-17 at 13:46 +0300, Orgad and Raizel Shaneh wrote:
Show 11 quoted lines
> Make a commit on top of master.
> 
> git rebase -i origin/master
> 
> Remove the commit.
> 
> Git prints "Nothing to do" and does not rebase.
> 
> Running 'git rebase -i' when there are no local commits has 'noop' in
> the first line, and with it the rebase is successful. Why is this
> 'noop' mandatory?
If you read the instructions, the last line says
    # However, if you remove everything, the rebase will be aborted

so if you want to do a no-op, then you need to tell it. This is the same way you abort a commit, by providing it with an empty message.

But more important would be /why/ you feel that rebase -i is the tool you should be using. If you'd like to move the branch pointer back, that's what the reset command is for. rebase deals with moving commits from one base to another and optionally reordering, squashing or removing some of them.

   cmn
Johannes Sixt· Jul 17, 2012, 12:25 UTC · re: Carlos Martín Nieto · lore

Re: git rebase -i does not rebase if all lines are removed

Am 7/17/2012 12:55, schrieb Carlos Martín Nieto:
> But more important would be /why/ you feel that rebase -i is the tool
> you should be using. If you'd like to move the branch pointer back,
> that's what the reset command is for.
Perhaps because that's not what the OP wanted to do?

Sometimes it happens that you rebase a bunch of commits, and only a handful remains because the others are already in upstream. Looking at each remaining one closely, you decide that they don't have to be rebased (maybe because slightly modified versions are in upstream), so you remove them one by one, and you end up with an empty list.

This has happened to me at one point, and writing "noop" after the list is empty is a minor nuisance. But I am not complaining. Because being able to abort an interactive rebase by clearing the list is much more important.

-- Hannes

← back to recent threads