Re: [PATCH 3/3] prevent HEAD reflog to be interpreted as current branch reflog

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2 Feb 2007, Andy Parkins wrote:

> Forgetting about detached heads for the moment,

That is not the way to go about it.  You cannot start forgetting about 
detached heads and come back to it afterwards like an afterthought.

> imagine that yesterday I did 
> lots of bouncing around on branches, around 1300 (although I wouldn't 
> remember the exact time).  Oh look, it's about 1300 now.  What then is
> HEAD@{yesterday} going to tell me?  What will it tell me one minute from now?  
> It would be the most confusing operation in the world; I'd have to remember 
> which branch I had checked out and what time I checked it out.

The exact same argument could be said if you did 1300 operations on a 
single branch, say master.  What would master@{yesterday} tell you?  
What will it tell you one minute from now?  Now suppose that you have 
only one branch and therefore HEAD reflog would be a duplicate of master 
reflog.

Answer: it would carry the same kind of confusion as your example above.

> I really don't want to be able to answer the question what branch did I have 
> checked out 15 minutes ago.  I do want to ask where was my current branch 15 
> minutes ago.

Then simply use @{15 minutes ago}.  You'll even save yourself some 
typing!  It is not like if you have to type HEAD for most operations 
anyway since HEAD is the likely default in most cases.  So you may even 
forget that the HEAD entity exists and be just fine.

But HEAD is still a moving pointer and we might want to know that it 
switched from one branch to another at some point.  And the only way for 
that to be sensible is by having a separate reflog for HEAD that is the 
exact log of every operations you perform regardless of the actual 
branch you might be on.

> Then of course, it's perfectly reasonable to treat the detached HEAD as 
> meaning that the symref HEAD was pointing at a kind of virtual branch - this 
> is a branch that isn't in the refs directory but is reflogged.  Other than 
> that it's no different from any other branch.
> 
> Any notation would do I think, @{} is as good as any other.  In fact, if we 
> used the name "unnamed branch" instead of "detached head", the notation @{} 
> is perfect.  (Actually I think unnamed branch is a much better term than 
> detached HEAD, because HEAD is never detached - it must point at something)

HEAD _does_ get detached.  It becomes loose in the air.  It doesn't drag 
any 
branch 
pointer with it.  And everything you do on top of a detached HEAD will 
be forgotten as soon as you leave it (and the eventual reflog for HEAD 
expires) if you don't attach it somehow with a tag or a new branch.  
There is no notion of a virtual branch at all, not technically, not 
conceptually either.


Nicolas
-
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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]