git: HEAD "текущая ветвь" или "вершина текущей ветки"? - PullRequest
0 голосов
/ 26 сентября 2018

В документации глоссария Git ( здесь ):

  1. HEAD определено как "Текущая ветвь".Позже в том же абзаце он пошел дальше, сказав, что "HEAD - это ссылка на один из head s в вашем хранилище".

  2. Однако в приведенном выше абзаце он определяетчто такое head: «именованная ссылка на коммит в tip ветви.»

Этот ответ в StackOverflowцитируется, "как указано в книге О'Рейли Git, 2-е издание, стр.69, HEAD всегда относится к самому последнему коммиту в текущей ветви ", что означает "HEAD является tip текущей ветки ".

Я в замешательстве.Является ли заглавная буква HEAD (1) текущей веткой или (2) tip текущей ветки?

ПРИМЕЧАНИЕ: этот вопрос не решил мой вопрос.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Независимо от того, что написано в документации (которая может нуждаться в некотором исправлении, не знаю), HEAD находится всегда там, где вы стоите, что вполне может быть верхушкой ветви ... но этоможет не.Скажем, вы извлекаете мастер ~ 2, и нет ветки, указывающей на мастер ~ 2.Затем HEAD находится на главном устройстве ~ 2, и вы работаете в отдельном состоянии HEAD .

0 голосов
/ 26 сентября 2018

HEAD - это просто то, куда вы сейчас указываете.Это может быть либо ветвь (которая является указателем на стек коммитов), либо сам коммит.В типичном случае использования он будет указывать на ветку.Тем не менее, он также может указывать на коммит (этот фрагмент предполагает, что вы находитесь в корне некоторого git-репо):

(base) Matthews-MacBook-Pro:abc matt$ git checkout -b test
Switched to a new branch 'test'
(base) Matthews-MacBook-Pro:abc matt$ cat .git/HEAD
ref: refs/heads/test
(base) Matthews-MacBook-Pro:abc matt$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
(base) Matthews-MacBook-Pro:abc matt$ cat .git/HEAD
ref: refs/heads/master
(base) Matthews-MacBook-Pro:abc matt$ git log -2
commit 5d4fe79e315c302722cfdfef3dd049f720db5acc (HEAD -> master, origin/master, origin/HEAD, test)
Author: Matt Messersmith <nah@blah.com>
Date:   Tue Sep 25 20:05:38 2018 -0400

    Problem 155 sol.

commit 73cdc8f6a679664e3b92a826377b280aadf31de1
Author: Matt Messersmith <nah@blah.com>
Date:   Tue Sep 25 19:47:50 2018 -0400

    An easy warmup.
(base) Matthews-MacBook-Pro:abc matt$ git checkout 73cdc8f6a679664e3b92a826377b280aadf31de1
Note: checking out '73cdc8f6a679664e3b92a826377b280aadf31de1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 73cdc8f An easy warmup.
(base) Matthews-MacBook-Pro:leetcode matt$ cat .git/HEAD
73cdc8f6a679664e3b92a826377b280aadf31de1

Разница между «веткой» и «кончиком ветви» не существуетЭто действительно имеет большой смысл.Это как запросить разницу между указателем и кончиком указателя.Ветви просто указывают на вещи (стеки коммитов), и HEAD действует аналогичным образом (может указывать на ветку или коммит).Я полагаю, это сводится к семантике и лингвистике.

HTH!

0 голосов
/ 26 сентября 2018

Оба.Мы говорим о:

  • A ответвление , с его интуитивным смыслом с человеческой точки зрения: цепочкой коммитов, которая прорастает либо из «ствола»(обычно master) или земля (начальный коммит);

  • A ответвление , как видно из Git, который отслеживает только самый последний коммит,Для Git ветвь - это только именованный указатель, который ссылается на конец цепочки коммитов.

Как только вы узнаете, что оба определения совпадают на практике, нет никакой реальной двусмысленности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...