git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: is rebase the same as merging every commit?

From
Petr Baudis <pasky@suse.cz>
Date
Jun 27, 2008, 08:34 UTC
Message-ID
<20080627083419.GD12567@machine.or.cz>
In-Reply-To
<vpqfxqz5qzj.fsf@bauges.imag.fr>
On Fri, Jun 27, 2008 at 08:30:56AM +0200, Matthieu Moy wrote:
Show 36 quoted lines
> "David Jeske" <jeske@willowmail.com> writes:
> 
> > Rebasing is described in the docs I've read as turning this: (sorry for the
> > dots)
> >
> > ..........A---B---C topic
> > ........./
> > ....D---E---F---G master
> >
> > Into this:
> >
> > ...................A'--B'--C' topic
> > ................../
> > .....D---E---F---G master
> >
> > If I understand it right (and that's a BIG if), it's the same as doing a merge
> > of C into G where every individual commit in the C-line is individually
> > committed into the new C' line.
> >
> > ...........-------------A---B---C
> > ........../            /   /   /
> > ........./        /---A'--B'--C'  topic
> > ......../        /
> > ....D---E---F---G - master
> 
> I'd draw that the other way:
> 
>   ...........---------A---B---C
>   ........../          \   \   \
>   ........./        /---A'--B'--C'  topic
>   ......../        /
>   ....D---E---F---G - master
> 
> > (1) Is the above model a valid explanation?
> 
> Sounds correct to me.

I don't think you can call it correct since it assumes !(2) while (2) holds. Drawing the diagram this way is misleading; merging commits one-by-one implies preserving the merge information in the history graph; nothing like that is done by rebase.

Rebase is more like _cherry-picking_ all the patches on your branch on top of the upstream branch. You just essentially take each patch (commit message + diff to parent) growing on top of upstream's E and recommit it on top of G.

> > (2) From the documentation diagrams, it looks like the rebased A' has only (G)
> > as a parent, not (A,G). If this is the case, why?
..snip..
Show 5 quoted lines
> > (i.e. not connecting those nodes throws away useful information)
> 
> For the use-cases where this information is useful, "rebase" is not
> for you. Indeed, in these cases, a plain "merge" is usually what you
> want.

Indeed, noone forces you into the rebase workflow for your own projects. I personally never ever rebase (I do use StGIT though, but it records per-patch history and makes sure I'm always in some consistent state).

-- 
				Petr "Pasky" Baudis
The last good thing written in C++ was the Pachelbel Canon. -- J. Olson
Previous: David JeskeNext: David Jeske
Message 4 of 5 in “is rebase the same as merging every commit?”
  1. David JeskeAug 14, 2016
  2. Matthieu MoyJun 27, 2008
  3. David JeskeJun 27, 2008
  4. Petr BaudisJun 27, 2008
  5. David JeskeAug 14, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.