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

Re: More Beginning Git Questions

From
Ttactical <a5158017@nepwk.com>
Date
Sep 25, 2011, 21:07 UTC
Message-ID
<1ttmqsxtaj98i$.hv6s5shjeugr.dlg@40tude.net>
In-Reply-To
<m3oby8pcfz.fsf@localhost.localdomain>
Jakub Narebski wrote:
Show 13 quoted lines
>>> With merging into branch with uncomitted changes your fairly well
>>> understood 3-way merge (sometimes virtual 3-way merge in the case of
>>> multiple common ancestors) would turn into 4-way merge.
>> 
>> I don't see why it would be a four-way merge rather than a three-way merge.
> 
> You have four version: "base" (ancestor version), "theirs"
> (branch/clone being merged), "ours" (comitted changes on current
> branch) and "new" (uncomitted changes on current branch).
> 
> Unless Mercurial does 3-way merge of "new", "theirs" and "base"...
> with transaction based atomicity (saving "new" before attempting
> merge) they can do that.

I've not read the code, but surely Mercurial does a three-way merge here. It wouldn't be sane to do anything else.

Show 9 quoted lines
>>> What you use uncomitted changes for, I would use is a separate branch,
>>> and keep it rebasing (something like using 'mq' in Mercurial).
>> 
>> Yes, but, as I mentioned, rebasing is less flexible.  A rebase here is
>> effectively a merge and a commit in one step, whereas my approach separates
>> the merge and the commit.
> 
> Errr... what?  You first commit your changes, then keep it rebasing to
> keep them up to date on top of fresh version.

Like I said before, with my approach, after I merge, I can check that everything still compiles, that unit tests still pass, and so on, before finally checking in. Rebasing, on the other hand, is essentially merging and checking in in one step. *After* you've rebased, you can run unit tests, etc., but you've *already* checked in at that point. (Sure, you could then mutate history if need be, but it's rather less flexible than my approach, where the check-in is not made until desired.)

Show 11 quoted lines
>>> What do you use anonymous branching for?
>> 
>> Anonymous branching is great for minor divergence that isn't really
>> significant enough to deserve a name.  It's also great for branches that
>> *are* significant enough to deserve a name, but where you want to defer
>> naming the branch right up until you merge it into another branch.  At that
>> point you can 'name' the branch in the commit message.
> 
> I think you can use detached HEAD for that, at least when working on
> one issue at a time (you have to name branch when switching to some
> other work).

But in Mercurial I can switch between anonymous branches as much as I like without anything ever being deleted.

Show 5 quoted lines
>> From what I read, detached heads are subject to garbage collection.
>  
> No, HEAD is protected against garbage collecting.  To be sure you
> should name a branch when switching branches, though reflog would
> protect you for 30 days (by default) even if you don't do that.

So Git doesn't really support anonymous branching as part of a normal workflow.

Previous: Jakub NarebskiNext: Konstantin Khomoutov
Message 15 of 24 in “More Beginning Git Questions”
  1. Jon ForrestSep 23, 2011
  2. Matthieu MoySep 23, 2011
  3. Jakub NarebskiSep 23, 2011
  4. Jon ForrestSep 23, 2011
  5. Mihamina RakotomandimbySep 23, 2011
  6. Jakub NarebskiSep 23, 2011
  7. tacticalSep 24, 2011
  8. Frans KlaverSep 24, 2011
  9. tacticalSep 24, 2011
  10. Seth RobertsonSep 24, 2011
  11. tacticalSep 25, 2011
  12. Jakub NarebskiSep 25, 2011
  13. tacticalSep 25, 2011
  14. Jakub NarebskiSep 25, 2011
  15. tacticalSep 25, 2011
  16. Konstantin KhomoutovSep 26, 2011
  17. tacticalSep 26, 2011
  18. Andrew ArdillSep 26, 2011
  19. tacticalSep 26, 2011
  20. Jakub NarebskiSep 26, 2011
  21. Jakub NarebskiSep 24, 2011
  22. tacticalSep 24, 2011
  23. Jakub NarebskiSep 25, 2011
  24. Junio C HamanoSep 23, 2011

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.