Когда я делаю git log --oneline в локальной ветке, которая опережает origin на несколько коммитов, я получаю что-то вроде:
ff0dc35 (HEAD -> main) Style headers
08183f1 Fix <Title>s
071d82e (origin/main, origin/HEAD) Style list items
9b24f09 Add style.css
b9fd2fa Add index.html and 3 other pages
69748ca Initial commit
Из этого ответа я понял, что
HEAD
относится к коммиту, на который в данный момент указывает мое репо.main
это веткаorigin
относится к удаленному репоЧего я не понимаю, так это разницы между нотацией -> (например, HEAD -> main) и нотацией / (например, origin/main и origin/HEAD). Что означает каждая вещь?
HEAD -> main
origin/main
origin/HEAD
@tkausl спасибо! Итак, origin/main обозначает удаленную ветвь, main обозначает локальную ветвь. HEAD — это указатель, и он указывает на main, локальную ветку. Тогда запись несовместима? Если origin/main обозначает ветвь, то что обозначает origin/HEAD? HEAD не является филиалом. Это также не коммит. Я, наверное, просто зациклен на непоследовательных обозначениях.
HEAD refers to the commit that my repo is currently pointing at
.... ну, возможно, вы уже усвоили это понятие, но это неточная формулировка. В одном репо может быть несколько HEADS
(любезно предоставлено worktrees
).... поэтому HEAD
всегда находится там, куда указывает текущее рабочее дерево. Я только что протестировал создание второго рабочего дерева, используя какую-то случайную фиксацию, и, зайдя туда и сделав журнал, HEAD
указывал на ту случайную фиксацию, которая проверена в этом рабочем дереве, которое отличается от HEAD
в рабочем дереве по умолчанию (все это в тот же репозиторий).
HEAD всегда там, где вы стоите (концепция сильно отличается от HEAD svn, на всякий случай). Если у вас проверен местный филиал, там будет написано HEAD -> some-branch. Если вы не работаете с локальной веткой (т. е. с отсоединенным состоянием HEAD), она будет отображаться как просто HEAD, ни на что не указывающая. Тогда origin/main — это main ветка в origin удаленном. origin/HEAD — это место, где HEAD этого удаленного репо стоит в данный момент.
«Если вы не работаете с локальной веткой (также известной как отсоединенное состояние HEAD), она будет отображаться как просто HEAD, ни на что не указывающая». Это может быть HEAD, main, т. е. и HEAD, и main указывают на один и тот же коммит. Просто небольшое дополнение.
«Тогда origin/main — это main ветка в origin удаленном». Не совсем; это локальная ветка удаленного отслеживания, которая отслеживает, где main находится на origin. Обновляется при любых операциях fetch/pull/push.
Я считаю, что мнение @phd еще точнее :-)
Что касается других вещей, которые могут появиться вместе с HEAD, это верно и для других отсылок, а не только HEAD, поэтому я не упоминал об этом, хотя я прекрасно об этом знаю. Это для ясности, @phd.
origin/main
— ветка,main
— ветка,HEAD
указывает наmain
.