From: D. Ben Knoble Date: Tue, 07 Oct 2025 18:39:52 GMT Subject: Re: [PATCH] doc: add a explanation of Git's data model Message-ID: In-Reply-To: On Tue, Oct 7, 2025 at 11:51 AM Patrick Steinhardt wrote: > > On Fri, Oct 03, 2025 at 05:34:36PM +0000, Julia Evans via GitGitGadget wrote: [snip] > > + A branch is a name for a commit ID. > > + That commit is the latest commit on the branch. > > + Branches are stored in the `.git/refs/heads/` directory. > > ++ > > +To get the history of commits on a branch, Git will start at the commit > > +ID the branch references, and then look at the commit's parent(s), > > +the parent's parent, etc. > > + > > +[[tag]] > > +tags: `.git/refs/tags/`:: > > + A tag is a name for a commit ID, tag object ID, or other object ID. > > + Tags are stored in the `refs/tags/` directory. > > ++ > > +Even though branches and commits are both "a name for a commit ID", Git > > +treats them very differently. > > +Branches are expected to be regularly updated as you work on the branch, > > +but it's expected that a tag will never change after you create it. > > This sounds a bit like the user itself needs to update the branch. How > about this instead: > > Even though branches and commits are both "a name for a commit ID", Git > treats them very differently: > > - Branches can be checked out directly. If so, creating a new > commit will automatically update the checked-out branch to > point to the new commit. > > - Tags cannot be checked out directly and don't move when > creating a new commit. Instead, one can only check out the > commit that a branch points to. This is called "detached > HEAD", and the effect is that a new commit will not update missing "the tag." ?