Что означает "HEAD -> branch, origin / branch" в журнале git commit? - PullRequest
2 голосов
/ 12 мая 2019

Я пытаюсь понять вывод команды git log.Обычно я вижу, что HEAD указывает на конкретную ветвь, но я не совсем понимаю, что имеется в виду, когда HEAD указывает на локальную ветвь и удаленную ветвь (HEAD -> ветка, origin / branch).

Я пытался найти ответ в Интернете, но я даже не был уверен, как написать вопрос, и результаты, которые действительно появились, не были связаны.

git log
commit 3b64cc50d6fe262d007853774689e8ad58e0f2ae (HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix)
Author: user <user_email>
Date:   Some_Date

    Added build flag to platform.ini file: -D UAVCAN_CPP_VERSION=UAVCAN_CPP11

Когда я запускаю git log, как показано выше, я не знаю, что означает (HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix).Обычно заголовок указывает только на одну ветвь, тогда как здесь, по некоторым причинам, он указывает на локальную ветвь и удаленную ветвь.Есть идеи почему?

Ответы [ 2 ]

4 голосов
/ 12 мая 2019

Книга Pro Git гласит:

Как Git узнает, в какой ветке вы находитесь в данный момент?Он хранит специальный указатель, называемый HEAD .... В Git это указатель на локальную ветку, в которой вы сейчас находитесь.В этом случае вы все еще работаете на master.

HEAD указывает на конкретную ветку, но команда git log также показывает, где находится удаленная ветка по отношению к вашей локальной ветке.В этом случае две ветви выстраиваются в один и тот же коммит.Это не всегда так.Все это хорошо описано с помощью диаграмм в главе 3 .

0 голосов
/ 13 мая 2019

(HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix) - это выход, который в основном контролируется --decorate[=short|full|auto|no]. Вывод означает «имена ссылок любых коммитов, которые показаны». Если ничего не указано, по умолчанию используется --decorate=short. Чтобы скрыть вывод, используйте --no-decorate. Чтобы отфильтровать вывод, используйте --decorate-refs=<pattern> и --decorate-refs-exclude=<pattern>. Чтобы узнать все эти ссылки, мы можем использовать git for-each-ref --points-at=<commit>.

В вашем случае origin/internal-env-board-david-fix не имеет прямого отношения к HEAD. И internal-env-board-david-fix, и origin/internal-env-board-david-fix прямо указывают на 3b64cc50d6fe262d007853774689e8ad58e0f2ae, а HEAD указывают только на internal-env-board-david-fix. Другими словами, HEAD косвенно указывает на 3b64cc50d6fe262d007853774689e8ad58e0f2ae. Знак -> указывает на косвенность. С cat .git/HEAD он печатает ref: refs/heads/internal-env-board-david-fix.

HEAD--->internal-env-board-david-fix--->3b64cc50d6fe262d007853774689e8ad58e0f2ae
origin/internal-env-board-david-fix------^

Если мы введем git checkout 3b64cc50d6fe262d007853774689e8ad58e0f2ae, чтобы перейти в отдельное состояние HEAD, украшение будет (HEAD, internal-env-board-david-fix, origin/internal-env-board-david-fix) с пропущенным знаком ->. Содержание .git/HEAD станет 3b64cc50d6fe262d007853774689e8ad58e0f2ae. Теперь HEAD и две другие ветви прямо указывают на 3b64cc50d6fe262d007853774689e8ad58e0f2ae.

                        HEAD--->3b64cc50d6fe262d007853774689e8ad58e0f2ae
internal-env-board-david-fix-----^    ^
origin/internal-env-board-david-fix---|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...