Существует два различных хороших способа сделать это и несколько плохих способов.
Самый распространенный плохой способ, который вы найдете, - этоВариант на эту тему:
branch=$(git branch | grep '\*' | cut -d' ' -f2) # don't do this!
Замените это на:
branch=$(git rev-parse --abbrev-ref HEAD)
Обратите внимание, что если HEAD
равно отсоединено (обычныйдостаточно состояния, которое означает, что вовсе не на какой-либо ветви , обычно встречается, например, когда вы находитесь в середине перебазирования, которое вы еще не завершили), просто печатается HEAD
.Использование этого в качестве имени ветви часто работает и делает правильные вещи, так что все в порядке, пока, ну, все в порядке.(cut
версия этого отпечатка (HEAD
, которая не работает.)
Другой способ сделать это:
branch=$(git symbolic-ref --short HEAD) || exit
(который вы можете сделать любительницей, если хотите).В этом варианте, если вы не находитесь на ветке - если вы находитесь в том режиме HEAD - команда git symbolic-ref
выдаст жалобу:
fatal: ref HEAD is not a symbolic ref
и предложение || exit
сделаетваш сценарий завершается немедленно, вместо того, чтобы продолжать использовать $branch
, как если бы это было допустимое имя ветви, когда это не так.Используйте этот фрагмент кода, если использование буквальной строки HEAD
вместо фактического имени ветви является неправильным .