Ron Garret <ron1@xxxxxxxxxxx> writes: > 1. The term "detached HEAD" is inherently misleading. A detached HEAD > isn't detached from anything, it's just pointing to the middle of a > branch, which is to say, to a commit that happens to already have > descendants. For that matter, the name HEAD is itself misleading, since > HEAD need not be the head of a branch (though normally it is). A better > name for HEAD would have been CURRENT or ACTIVE. I recognize it's > probably too late to change it now. This description, especially the phrase "middle of a branch" shows that you don't understand git yet. A git branch is _not_ a line (nor multiple lines) of development. It is merely a _point_ in the history. "A commit that is in the middle of an ancestry chain with existing descendants" can be at the tip of a branch and does not have anything to do with detached HEAD state. When HEAD points at a branch, making a commit advances _that_ branch. And we say you are "on that branch". When HEAD is detached, because it is not attached to anything, it advances no branch. "detached HEAD" is detached in the very real sense. It is not attached to _any_ branch. > 2. There are a lot of things in the documentation that turn out, now > that I understand what is going on, to be subtly misleading. For > example, "A single git repository can track development on multiple > branches. It does this by keeping a list of heads which reference the > latest commit on each branch." That last part is only true if the heads > are not "detached". This is from old terminology. We used to use "head" (lowercase) and "branches" pretty much interchangeably and the quoted description is from the era _before_ detached HEAD was invented, as a way to quickly get a temporary state where you can browse around freely and without having to worry about having to clean up afterwards even if you made commits in that state by simply going back to an attached state. So do a "s/a list of heads/a list of branch pointers/" replacement and you will be fine. > Another example: "The HEAD then refers to the SHA-1 of the commit > instead of to a branch, and git branch shows that you are no longer on a > branch:" But you *are* on a branch, you just aren't at the head of the > branch. No, you are _literally_ not on _any_ branch at that point. Making a commit from that state does not advance _any_ branch and doing "reset --hard $commit" from that state does not affect _any_ branch. -- 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