* user manual question
@ 2008-12-28 11:07 Zorba
2008-12-28 14:38 ` Sitaram Chamarty
0 siblings, 1 reply; 12+ messages in thread
From: Zorba @ 2008-12-28 11:07 UTC (permalink / raw)
To: git
Under "Examining an old version without creating a new branch" subsection in
chapter1
to aid my understanding, could the statement:
"The HEAD then refers to the SHA1 of the commit instead of to a branch, and
git branch shows that you are no longer on a branch:"
be restated more explicitly as:
"The HEAD then refers to the SHA1 of the commit instead of to a branch head,
and git branch shows that you are no longer on a branch head:"
?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-28 11:07 user manual question Zorba
@ 2008-12-28 14:38 ` Sitaram Chamarty
2008-12-28 16:36 ` Dilip M
2008-12-29 0:48 ` Zorba
0 siblings, 2 replies; 12+ messages in thread
From: Sitaram Chamarty @ 2008-12-28 14:38 UTC (permalink / raw)
To: git
On 2008-12-28, Zorba <cr@altmore.co.uk> wrote:
> Under "Examining an old version without creating a new branch" subsection in
> chapter1
>
> to aid my understanding, could the statement:
>
> "The HEAD then refers to the SHA1 of the commit instead of to a branch, and
> git branch shows that you are no longer on a branch:"
>
> be restated more explicitly as:
>
> "The HEAD then refers to the SHA1 of the commit instead of to a branch head,
> and git branch shows that you are no longer on a branch head:"
Sure, but I prefer "tip"; reduces confusion between "head"
and "HEAD" in spoken descriptions (I teach internal classes
on git occasionally, once even on a conf call!)
The git glossary makes no mention of "tip", so this is
probably "unblessed" :-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-28 14:38 ` Sitaram Chamarty
@ 2008-12-28 16:36 ` Dilip M
2008-12-29 0:51 ` Zorba
2008-12-29 0:48 ` Zorba
1 sibling, 1 reply; 12+ messages in thread
From: Dilip M @ 2008-12-28 16:36 UTC (permalink / raw)
To: Sitaram Chamarty; +Cc: git
On Sun, Dec 28, 2008 at 8:08 PM, <sitaramc@gmail.com> wrote:
> On 2008-12-28, Zorba <cr@altmore.co.uk> wrote:
>> Under "Examining an old version without creating a new branch"
>> subsection in chapter1
>>
>> to aid my understanding, could the statement:
>>
>> "The HEAD then refers to the SHA1 of the commit instead of to a
>> branch, and git branch shows that you are no longer on a branch:"
>>
>> be restated more explicitly as:
>>
>> "The HEAD then refers to the SHA1 of the commit instead of to a
>> branch head, and git branch shows that you are no longer on a branch
>> head:"
>
> Sure, but I prefer "tip"; reduces confusion between "head" and "HEAD"
> in spoken descriptions (I teach internal classes on git occasionally,
> once even on a conf call!)
+1
I was (am) was initially confused about head and HEAD and assumed that
they are both same.
-- dm
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-28 14:38 ` Sitaram Chamarty
2008-12-28 16:36 ` Dilip M
@ 2008-12-29 0:48 ` Zorba
2008-12-29 1:12 ` Sitaram Chamarty
1 sibling, 1 reply; 12+ messages in thread
From: Zorba @ 2008-12-29 0:48 UTC (permalink / raw)
To: git
Hi Sitaram!
Thanks for clearing that one up.
Also, I did wonder about HEAD and head. One can move, the other doesn't!
(well, acually it does - head moves "forward", as the tip of the branch
grows)
you gotta love it
:-)
Thanks for your other post/reply too - I will be getting back to you on that
one
Conor
"Sitaram Chamarty" <sitaramc@gmail.com> wrote in message
news:slrnglf3qh.c7j.sitaramc@sitaramc.homelinux.net...
> On 2008-12-28, Zorba <cr@altmore.co.uk> wrote:
>> Under "Examining an old version without creating a new branch" subsection
>> in
>> chapter1
>>
>> to aid my understanding, could the statement:
>>
>> "The HEAD then refers to the SHA1 of the commit instead of to a branch,
>> and
>> git branch shows that you are no longer on a branch:"
>>
>> be restated more explicitly as:
>>
>> "The HEAD then refers to the SHA1 of the commit instead of to a branch
>> head,
>> and git branch shows that you are no longer on a branch head:"
>
> Sure, but I prefer "tip"; reduces confusion between "head"
> and "HEAD" in spoken descriptions (I teach internal classes
> on git occasionally, once even on a conf call!)
>
> The git glossary makes no mention of "tip", so this is
> probably "unblessed" :-)
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-28 16:36 ` Dilip M
@ 2008-12-29 0:51 ` Zorba
0 siblings, 0 replies; 12+ messages in thread
From: Zorba @ 2008-12-29 0:51 UTC (permalink / raw)
To: git
Hi Dilip,
Thanks for sharing that. It makes me feel not so stupid :-)
regards
>
> +1
>
> I was (am) was initially confused about head and HEAD and assumed that
> they are both same.
>
> -- dm
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 0:48 ` Zorba
@ 2008-12-29 1:12 ` Sitaram Chamarty
2008-12-29 6:33 ` Dilip M
2008-12-29 16:38 ` Zorba
0 siblings, 2 replies; 12+ messages in thread
From: Sitaram Chamarty @ 2008-12-29 1:12 UTC (permalink / raw)
To: git
On 2008-12-29, Zorba <cr@altmore.co.uk> wrote:
> Hi Sitaram!
>
> Thanks for clearing that one up.
you're welcome; we've all done a bit of struggling I guess!
> Also, I did wonder about HEAD and head. One can move, the other doesn't!
> (well, acually it does - head moves "forward", as the tip of the branch
> grows)
Here's an extract from my notes/internal talks on this:
=== basic concepts
* a branch is "an active line of development"
* //master//: default branch in a project, by convention
* //head//: tip of a branch
* a repo can track many branches, but the working tree is associated with
only one branch at a time
* //HEAD//: tip of the branch associated with the working tree; this is
where commits go
** except when it's "detached"
> Thanks for your other post/reply too - I will be getting back to you on that
> one
Glad to be of help. I don't consider myself a guru, and am
constantly waiting for one of the real gurus to strike me
down with a thunderbolt for saying something stupid :-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 1:12 ` Sitaram Chamarty
@ 2008-12-29 6:33 ` Dilip M
2008-12-29 16:38 ` Zorba
1 sibling, 0 replies; 12+ messages in thread
From: Dilip M @ 2008-12-29 6:33 UTC (permalink / raw)
To: Sitaram Chamarty; +Cc: git
On Mon, Dec 29, 2008 at 6:42 AM, <sitaramc@gmail.com> wrote:
> On 2008-12-29, Zorba <cr@altmore.co.uk> wrote:
>> Hi Sitaram!
>>
>> Thanks for clearing that one up.
>
> you're welcome; we've all done a bit of struggling I guess!
>
>> Also, I did wonder about HEAD and head. One can move, the other
>> doesn't! (well, acually it does - head moves "forward", as the tip
>> of the branch grows)
>
> Here's an extract from my notes/internal talks on this:
>
> === basic concepts * a branch is "an active line of
> development" * //master//: default branch in a project, by
> convention * //head//: tip of a branch * a repo can track
> many branches, but the working tree is associated with only one
> branch at a time * //HEAD//: tip of the branch associated with
> the working tree; this is where commits go ** except
> when it's "detached"
That's a nice,compact and effective note. Thanks for sharing :-)
Consider pushing the full notes to GITHUB...would be _useful_ for all of
us..(like me)...
-- dm
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 1:12 ` Sitaram Chamarty
2008-12-29 6:33 ` Dilip M
@ 2008-12-29 16:38 ` Zorba
2008-12-29 17:18 ` Björn Steinbrink
` (3 more replies)
1 sibling, 4 replies; 12+ messages in thread
From: Zorba @ 2008-12-29 16:38 UTC (permalink / raw)
To: git
so a detached HEAD is just a HEAD that is not sitting on a tip ?
i.e. if I do $ git reset --hard HEAD^
...pointing HEAD to the previous committ
this is a detached HEAD
(I thought a detached HEAD was maybe a head somewhere on another branch not
"reachable", i.e. a sibling, not a ancestor...
or something like that)
thanks guys
"Sitaram Chamarty" <sitaramc@gmail.com> wrote in message
news:slrnglg90m.olt.sitaramc@sitaramc.homelinux.net...
> On 2008-12-29, Zorba <cr@altmore.co.uk> wrote:
>> Hi Sitaram!
>>
>> Thanks for clearing that one up.
>
> you're welcome; we've all done a bit of struggling I guess!
>
>> Also, I did wonder about HEAD and head. One can move, the other doesn't!
>> (well, acually it does - head moves "forward", as the tip of the branch
>> grows)
>
> Here's an extract from my notes/internal talks on this:
>
> === basic concepts
> * a branch is "an active line of development"
> * //master//: default branch in a project, by convention
> * //head//: tip of a branch
> * a repo can track many branches, but the working tree is associated
> with
> only one branch at a time
> * //HEAD//: tip of the branch associated with the working tree; this
> is
> where commits go
> ** except when it's "detached"
>
>> Thanks for your other post/reply too - I will be getting back to you on
>> that
>> one
>
> Glad to be of help. I don't consider myself a guru, and am
> constantly waiting for one of the real gurus to strike me
> down with a thunderbolt for saying something stupid :-)
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 16:38 ` Zorba
@ 2008-12-29 17:18 ` Björn Steinbrink
2008-12-29 17:20 ` Markus Heidelberg
` (2 subsequent siblings)
3 siblings, 0 replies; 12+ messages in thread
From: Björn Steinbrink @ 2008-12-29 17:18 UTC (permalink / raw)
To: Zorba; +Cc: git
On 2008.12.29 16:38:30 -0000, Zorba wrote:
> so a detached HEAD is just a HEAD that is not sitting on a tip ?
>
> i.e. if I do $ git reset --hard HEAD^
>
> ...pointing HEAD to the previous committ
>
> this is a detached HEAD
No. At least that won't turn an "attached" HEAD into a detached HEAD.
Attached HEAD: HEAD is a symbolic ref to another ref.
Detached HEAD: HEAD is a non-symbolic ref to a commit.
So you can have:
HEAD -> refs/heads/master -> commitA --> attached HEAD
Or:
HEAD -> commitA --> detached HEAD
Note how the commit object is the same in both cases.
What you "git reset [--hard] HEAD^" does, depends on the kind of HEAD
you have.
"git reset HEAD^" will (conceptually, implementation might differ):
Resolve HEAD^ to find a commit.
and
Resolve HEAD until it finds a non-symbolic ref, and update that ref to
reference the commit it found.
Looking at the cases from above:
Attached case:
HEAD -> refs/heads/master -> commitA
Resolve HEAD^:
HEAD^ ==> refs/heads/master^ ==> commitA^ ==> commitA_parent
Find non-symbolic ref:
HEAD (symbolic) ==> refs/heads/master (non-symbolic)
So refs/heads/master gets updated to reference commitA_parent.
Now the detached case:
HEAD -> commitA
Resolve HEAD^:
HEAD^ ==> commitA^ ==> commitA_parent
Find non-symbolic ref:
HEAD (non-symbolic)
So HEAD gets updated to reference commitA_parent.
In other words, HEAD is what tells git what you have checked out. And
that's either a branch head (attached HEAD, symbolic ref) or a commit
(detached HEAD, non-symbolic ref).
In the symbolic ref case, operations like "commit" or "reset" work on
the branch you have checked out (found through the symbolic ref), in the
non-symbolic ref case (detached HEAD), those operations work on HEAD
itself.
Björn
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 16:38 ` Zorba
2008-12-29 17:18 ` Björn Steinbrink
@ 2008-12-29 17:20 ` Markus Heidelberg
2008-12-29 17:27 ` Sitaram Chamarty
2008-12-29 19:30 ` Daniel Barkalow
3 siblings, 0 replies; 12+ messages in thread
From: Markus Heidelberg @ 2008-12-29 17:20 UTC (permalink / raw)
To: Zorba; +Cc: git
Zorba, 29.12.2008:
> so a detached HEAD is just a HEAD that is not sitting on a tip ?
You can also get a detached HEAD with "git checkout origin/master",
although your HEAD points to a tip. But it's a remote tip and since you
can't work on remote branches, you now are on a detached HEAD (no
branch).
> i.e. if I do $ git reset --hard HEAD^
>
> ...pointing HEAD to the previous committ
>
> this is a detached HEAD
No, this isn't. "git reset <commit>" modifies your current head (local
branch), now HEAD still points to the tip, but the tip is one commit
older. A detached HEAD you can get with "git checkout HEAD^".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 16:38 ` Zorba
2008-12-29 17:18 ` Björn Steinbrink
2008-12-29 17:20 ` Markus Heidelberg
@ 2008-12-29 17:27 ` Sitaram Chamarty
2008-12-29 19:30 ` Daniel Barkalow
3 siblings, 0 replies; 12+ messages in thread
From: Sitaram Chamarty @ 2008-12-29 17:27 UTC (permalink / raw)
To: git
On 2008-12-29, Zorba <cr@altmore.co.uk> wrote:
> so a detached HEAD is just a HEAD that is not sitting on a tip ?
yes...
> i.e. if I do $ git reset --hard HEAD^
>
> ...pointing HEAD to the previous committ
>
> this is a detached HEAD
...but no. This is because git reset moves the tip of the
branch also (in this case, backward by one commit from the
previous). In effect, you're saying "discard my latest
commit and roll back by one".
"git checkout HEAD^" would get you a detached head though.
In this case you're saying "let the branch be where it is,
but let HEAD move up one level". So HEAD is now NOT at a
tip, and it'a a detached head.
It's instructive to run "gitk --all" when you're doing these
experiments sometimes.
> (I thought a detached HEAD was maybe a head somewhere on another branch not
> "reachable", i.e. a sibling, not a ancestor...
> or something like that)
no no that's just another branch that's all.
All this is pretty confusing in the beginning, but if you
don't lose your head, it'll all become clear eventually.
[What's that they say? Oh yeah "thank you ladies and
gentlemen I'll be here all night"!]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: user manual question
2008-12-29 16:38 ` Zorba
` (2 preceding siblings ...)
2008-12-29 17:27 ` Sitaram Chamarty
@ 2008-12-29 19:30 ` Daniel Barkalow
3 siblings, 0 replies; 12+ messages in thread
From: Daniel Barkalow @ 2008-12-29 19:30 UTC (permalink / raw)
To: Zorba; +Cc: git
On Mon, 29 Dec 2008, Zorba wrote:
> so a detached HEAD is just a HEAD that is not sitting on a tip ?
If you used CVS (extensively) back in the day, a detached HEAD is like
what you get if you do something like "cvs checkout -D yesterday" (CVS
called it "sticky tags"); you have a working directory that contains some
revision that isn't your latest revision. If you make changes, they can't
go into the history in the normal fashion, but you can build the project
and figure out how it worked back then.
With git, of course, you can do things you couldn't do from that state
with CVS. Because git supports forking history, you can make commits and
create a new branch to be on. Because git can handle having visibility
into other people's branches, you can get a detached HEAD by checking out
somebody else's branch (something like origin/next, for example).
The normal "attached HEAD" state is that there's some branch that you
update when you make a commit; the "detached HEAD" state means that, when
you make a commit, no branch is affected.
> i.e. if I do $ git reset --hard HEAD^
>
> ...pointing HEAD to the previous committ
>
> this is a detached HEAD
Nope, it's "git checkout (something that isn't one of your branches)",
just like CVS.
Git is like knitting. Commits are loops of yarn that hold other loops
(their parents) in place; branches are knitting needles that keep new
loops from falling out before other loops are holding them, and which hold
different loops at different times as you work; HEAD is the tip of a
needle that you use to make new loops. You usually use the tip of one of
your regular needles to make new loops, and then the body of the needle
holds the loop, but you could also use your fingers or something that will
just make the loop temporarily; that's a detached HEAD, because it doesn't
have the body of a needle behind it to hold loops when you use it for
something else.
-Daniel
*This .sig left intentionally blank*
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2008-12-29 19:31 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-28 11:07 user manual question Zorba
2008-12-28 14:38 ` Sitaram Chamarty
2008-12-28 16:36 ` Dilip M
2008-12-29 0:51 ` Zorba
2008-12-29 0:48 ` Zorba
2008-12-29 1:12 ` Sitaram Chamarty
2008-12-29 6:33 ` Dilip M
2008-12-29 16:38 ` Zorba
2008-12-29 17:18 ` Björn Steinbrink
2008-12-29 17:20 ` Markus Heidelberg
2008-12-29 17:27 ` Sitaram Chamarty
2008-12-29 19:30 ` Daniel Barkalow
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).