Как узнать, на какой ветке я нахожусь git, когда происхождение заказа/<отрасль>

У нас есть script, который фактически выполняет git fetch; git checkout origin/<branch> для развертывания определенной функции. Причина, по которой мы делаем это, заключается в том, что мы не должны избегать локальных ветвей (это тестовый сервер), поэтому script просто извлекает последние изменения и проверки в него, а затем перезагружает сервер.

Мы также создаем журнал, описывающий каждое сделанное развертывание, которое отправляется по электронной почте кому-то и архивируется. Интересно, что мы отправляем также развернутую ветку, но проблема в том, что когда мы делаем checkout origin/<branch>, мы переходим к отделить голову. Я прочитал несколько ответов с похожим вопросом, но ничего особенного.

Есть ли способ распечатать какую ветвь я в этом случае (независимо от пользовательского ввода, конечно)?

Ответ 1

Лучшее решение для нас, на которое указывает @SébastienDawans, было git show -s --pretty=%d HEAD. Результат похож на remotes/origin/<branch name>, поэтому, возможно, требуется очистка, но для наших нужд это просто отлично.

Ответ 2

git symbolic-ref --short HEAD должен указать вам, в какой ветке вы находитесь, или распечатать сообщение об ошибке, если вы не находитесь на ветке.

Ответ 3

Здесь git nthlastcheckout, он получает точную строку, которую вы использовали (или все после последнего пробела) для последней n-й выписки из reflog:

git config --global alias.nthlastcheckout '!nthlastcheckout'"() {
        git reflog |
        awk '\$3==\"checkout:\" {++n}
             n=='\${1-1}' {print \$NF; exit}
             END {exit n!='\${1-1}'}'
}; nthlastcheckout \"\[email protected]\""

Примеры:

$ git nthlastcheckout
master
$ git nthlastcheckout 2
v1.3.0^2