Re: [PATCH] doc: add a explanation of Git's data model
On Tue, Oct 7, 2025 at 11:51 AM Patrick Steinhardt <ps@pks.im> wrote:
>
> On Fri, Oct 03, 2025 at 05:34:36PM +0000, Julia Evans via GitGitGadget wrote:
Show 32 quoted lines
> > + 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/<name>`::
> > + 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