Активная ветвь репозитория Git - это ветвь, на которую указывает его HEAD.
Внутренне HEAD - это просто файл, который находится в верхней части GIT_DIR хранилища (каталог .git
неголый репозиторий или вершина голого репозитория).Если HEAD выглядит как ref: refs/some/thing
, то оно интерпретируется как symref (символьная ссылка) для именованного ref (обычно ветвь под refs/heads/
).Если HEAD содержит 40-байтовое шестнадцатеричное представление ASCII имени объекта (SHA-1), то мы говорим, что это «отсоединенный HEAD» (так как он не «присоединен» к нормальной ветви), и он работает как обычный ref (то есть работает как любая другая ветвь).
Как вы и предполагали, git branch
покажет текущую активную ветвь со звездочкой перед ней.Это работает в обычных (не голых) и пустых репозиториях.
В обычных (не голых) репозиториях (с работающими деревьями) HEAD автоматически поддерживается при обычном использовании git checkout :
git checkout other-branch
# HEAD is now a symref to refs/heads/other-branch
Голые репозитории (обычно используемые на серверах) не имеют рабочего дерева, поэтому git checkout не будет работать.Чтобы обновить голый репозиторий HEAD, вы должны использовать git symbolic-ref :
git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch
# HEAD is now a symref to refs/heads/other-branch
В обоих случаях вы должны иметь прямой доступ к репозиториюобновить HEAD, чтобы изменить текущую активную ветку.Как и большинство хостинг-провайдеров, GitHub не предоставляет прямой доступ к репозиториям.Однако он предоставляет веб-интерфейс , который позволяет пользователям изменять HEAD своих репозиториев (они называют его «веткой по умолчанию»).