Konstantin Khomoutov wrote: >>>> 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. > > I perceive a certain logical fallacy here: you cannot switch between > anything anonymous because to switch, you should somehow identify > something to switch to--a name in whatever sense we put into this word. In Mercurial, you can just update to a particular changeset (and you identify that changeset by repository-local revision number or globally unique ID) and then commit again. The point is that there's no need to give a label to a head in Mercurial (although you can if you want to, using Mercurial bookmarks, which are basically the same as what Git uses). Here's an example of anonymous branching: c:\test>hg init c:\test>echo test>foo c:\test>hg commit --addremove -m initial adding foo c:\test>echo first>>foo c:\test>hg commit -m first c:\test>hg log changeset: 1:3e895ec28d6c tag: tip user: tactical date: Mon Sep 26 01:39:46 2011 +0100 summary: first changeset: 0:b51644bb3450 user: tactical date: Mon Sep 26 01:39:40 2011 +0100 summary: initial c:\test>hg update 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved c:\test>echo second>>foo c:\test>hg commit -m second created new head c:\test>hg glog @ changeset: 2:35c82a7e7de1 | tag: tip | parent: 0:b51644bb3450 | user: tactical | date: Mon Sep 26 01:40:10 2011 +0100 | summary: second | | o changeset: 1:3e895ec28d6c |/ user: tactical | date: Mon Sep 26 01:39:46 2011 +0100 | summary: first | o changeset: 0:b51644bb3450 user: tactical date: Mon Sep 26 01:39:40 2011 +0100 summary: initial I now have two anonymous branches, and these will never be garbage collected. I can easily update to either branch with "hg update 1" or "hg update 2" (or "hg update 0" again, if i want to create yet another anonymous branch). > As I understand, by switching between branches in Mercurial you mean > switching between directories with clones; No. Clones are a different topic. > As to branches, they do have names in Git but they are very loosely > coupled with their names: tag a tip of some branch (to still have a > handle on that tip commit) then delete that branch--there will be no > traces of that branch's name left, the branch's name is not encoded in > its history in any way. Git branch names are basically the same as Mercurial bookmarks. The difference is that in Mercurial you don't *have* to use bookmarks. > The branch names is just a way to not mess with > SHA-1 names of commits (and to have references to those commits to keep > them out of consideration for garbage collection). > Hence the idea to demand support for anonymous branches in Git's model > is just unfounded. I think it's simply a weakness of Git. There are zero problems with anonymous branching in Mercurial, and it's a very powerful and simple system. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html