Есть ли прямой способ определить ветку Git @ {- N}, например, без парсинг лога или тихая проверка? - PullRequest
2 голосов
/ 13 апреля 2019

Мне бы хотелось, чтобы в Git был определен ответвление, на которое ссылается @{-N}, то, что я мог бы использовать в сценариях.

Похоже, он нигде не всплыл.Я могу придумать несколько способов самому создать функциональность, например, синтаксический анализ .git/logs/HEAD, запись в пользовательский файл журнала на post-checkout (оба работоспособных решения, но они чувствуют себя тяжелыми руками), или тихий запуск checkout @{-N}, а затем без вывода сообщений.запуск checkout - (медленно, не обязательно хорошо играет с грязным рабочим деревом и меняет стек оформления).

Но есть ли способ получить его напрямую?Например, есть ли способ использовать функции, которые использует сам Git, не копируя значительную часть исходного кода Git?Я полагаю, что синтаксис был впервые введен в https://github.com/git/git/commit/8415d5c7ef63237f6efab0c9aef0b0fdbcbfda25 (git branch) и https://github.com/git/git/commit/c9717ee97075bb333684fa2f63e9136c5f7d89bf (git merge), где он рассчитывается с использованием внутренних функций, с которыми я не знаком.

Мне также будут интересны комментарии, указывающие на другие коммиты в Git-источнике, связанные с этим.

1 Ответ

3 голосов
/ 13 апреля 2019

Использование git rev-parse:

$ git rev-parse --symbolic-full-name @{-1}
refs/tags/v2.1.0
$ git rev-parse --symbolic-full-name @{-2}
refs/heads/master

Имейте в виду, что если для одного из них нет символического полного имени, эта конкретная форма выдает ничего:

$ git rev-parse --symbolic-full-name @{-3}
$ git rev-parse @{-3}
6c4ab27f2378ce67940b4496365043119d7ffff2

Это происходит потому, что @{-3} вовсе не был ветвью, это был необработанный хеш коммита.

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