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

Re: Effective difference between git-rebase and git-resolve

From
Linus Torvalds <torvalds@osdl.org>
Date
Mar 25, 2006, 04:23 UTC
Message-ID
<Pine.LNX.4.64.0603242014160.15714@g5.osdl.org>
In-Reply-To
<20060325035423.GB31504@buici.com>
On Fri, 24 Mar 2006, Marc Singer wrote:
Show 6 quoted lines
>
> The process I've been using to keep my patches current with the latest
> development is this:
> 
>   git checkout linus && git pull linus
>   git checkout work
You'd be much more efficient if you just did
	git fetch linus

which avoids switching back-and-forth (and speeds up the pull too, since it doesn't need to update any working directories).

> When I'm ready to merge,
> 
>   git resolve work linus "Update with head"
No, don't do this.

"git resolve" is the _old_ stupid merger, which isn't very helpful at all. So please use

	git merge "Merge with Linus" work linus
instead, which will use the proper "recursive" merge functionality.
Show 9 quoted lines
> Then, I found git-rebase which seems to be more what I'd like to use
> since it moves my patches along on top of the main development line.
> 
>   git rebase linus
> 
> This time, almost everything merged without a hitch except for the
> thorny file from before.  I edited the file, removing the conflict
> markers, and started a build.  But what I found was that some of the
> changes I'd made were no longer present.
Yeah, "git rebase" is not _nearly_ as intuitive as doing a real merge.

What happened was that you resolved the thorny merge, but the rebase had stopped when it hit it, so it never actually did the rest of the rebase. Which explains why some of your changes are no longer present: they are still in the "rebase queue".

>   1) Am I using rebase correctly?

Yes, but you missed the fact that unlike "git merge", rebasing really is a "move one commit at a time" thing, and it stopped on the middle.

>   4) Should I prefer rebase over resolve?

You should never do "resolve", it's very oldfashioned. If you want to merge, just use "git merge", which will do the right thing.

As to rebase, it often is very nice, but on the other hand, it leaves things in a total mess when it fails, which is a pity. Maybe there's a nice way to just continue, but I end up just doing a

	git reset --hard ORIG_HEAD
to undo the failed rebase.

Junio, is there some magic to restart a rebase after you've fixed up the conflicts?

		Linus
Previous: Marc SingerNext: Junio C Hamano
Message 2 of 10 in “Effective difference between git-rebase and git-resolve”
  1. Marc SingerMar 25, 2006
  2. Linus TorvaldsMar 25, 2006
  3. Junio C HamanoMar 25, 2006
  4. Marc SingerMar 25, 2006
  5. Junio C HamanoMar 25, 2006
  6. J. Bruce FieldsMar 26, 2006
  7. Junio C HamanoMar 25, 2006
  8. Johannes SchindelinMar 25, 2006
  9. Mark WoodingMar 25, 2006
  10. Johannes SchindelinMar 25, 2006

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.