git узнать текущую ветку

Список локальных веток

Чтобы вывести список локальных веток используется команда:

Список удаленных веток

Чтобы показать удаленные (remote) ветки используется ключ -r :

Перед тем, как выполнять данную команду, можно сначала обновить удаленные ветки у себя в репозитории, для этого используется команда:

git fetch загружает коммиты, файлы и ссылки из удаленного репозитория. Данная команда выполняется, когда вы хотите посмотреть, что изменилось в удаленном репозитории, что кто-то другой сделал в нем. При этом очень важно, что git fetch не изменяет никаких ваших локальных данных, над которыми вы работаете.

Список всех веток

Для вывода всех веток, локальных и удаленных, используется ключ -a :

Написал небольшой скрипт, который берет название ткущего бранча в гите, и использует его в дальнейших манипуляциях.

Для того, чтобы узнать название ветки, достаточно выполнить команду git branch.

Однако проблема заключается в том, что команда выводит список всех веток, помечая рабочую ветку звездочкой (*):

Из всего этого списка нам нужно вычленить название dev, да еще и без звездочки.

Есть сервер git, туда я поставил web-интерфейс, и надо прикрутить ctags на файлы, для этого надо обработать каждый push в hook’ах, решил я сделать две ветки на репозитории origin:

Надо теперь как то узнавать элейес репозитория (origin или др.), и ветку, по http такая информация не передается.

проделал я в локальном репе:

после этого я посмотрел файл head:

в .git/HEAD на клиенте: ref: refs/heads/dev
на сервере ref: refs/heads/master

dev была создана после master

но HEAD по сути должен же указывать на последний коммит в дереве изменений? Почему на сервере master?

вот еще выполнил на сервере:

то есть, может быть информация о ветке хранится в .pack файле? который по сути является хеш-таблицей(архивом) всего проекта.

1 ответ 1

предварительное напоминание

в git-е веткой (branch) называется «скользящий» указатель на commit, а не набор commit-ов, как принято в некоторых других системах управления контролем версий.

но HEAD по сути должен же указывать на последний коммит в дереве изменений? Почему на сервере master?

в bare-репозитории файл HEAD ссылается на «ветку по умолчанию», что в первую очередь влияет на результаты клонирования этого репозитория: если при клонировании не указано, на какую ветку следует переключить рабочий каталог (working directory) по окончании клонирования, именно на эту ветку и произойдёт переключение.

может быть информация о ветке хранится в .pack файле?

информация о ветках хранится в каталоге refs/heads . в описанном вами репозитории там должно быть по крайней мере два файла master и dev , содержащие хэш коммита, на который в данный момент и указывает соответствующая ветка.

Оцените статью