Показывать только текущую ветвь в Git

Я попытался найти специальную команду git для этого, но не смог ее найти. Может ли кто-нибудь предложить что-нибудь короче или быстрее, чем:

git branch | awk '/\*/ { print $2; }'

Ответы

Ответ 1

$ git rev-parse --abbrev-ref HEAD
master

Это должно работать с Git 1.6.3 или новее.

Ответ 2

В Git 1.8.1 вы можете использовать команду git symbolic-ref с опцией "--short":

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

Ответ 3

Вам может быть интересен вывод

git symbolic-ref HEAD

В частности, в зависимости от ваших потребностей и макета, вы можете захотеть сделать

basename $(git symbolic-ref HEAD)

или

git symbolic-ref HEAD | cut -d/ -f3-

а затем снова появится файл .git/HEAD, который также может вас заинтересовать.

Ответ 4

С Git 2.22 (Q2 2019) у вас будет более простой подход: git branch --show-current.

См. Коммит 0ecb1fc (25 октября 2018 г.) Дэниелса Умановскиса (umanovskis).
(Объединено Junio C Hamano - gitster - в коммите 3710f60, 07 марта 2019 г.)

branch: ввести --show-current опция отображения

При вызове с параметром --show-current git branch выводит имя текущей ветки и завершается.
Только фактическое имя печатается без refs/heads.
В отключенном состоянии HEAD ничего не выводится.

Предназначен как для написания сценариев, так и для интерактивного/информативного использования.
В отличие от git branch --list, для получения имени ветки не требуется никакой фильтрации.

Ответ 5

Это старый поток, на который я только что наткнулся. Из того, что я могу сказать, нет способа изначально показать только текущую ветвь в GIT, поэтому я использовал:

#> git branch | grep '*'

Ответ 6

Я думаю, это должно быть быстро и может быть использовано с API-интерфейсом Python.

git branch --contains HEAD
* master

Ответ 7

Я использую

/etc/bash_completion.d/git

Он поставляется с git и предоставляет приглашение с именем ветки и аргументом.

Ответ 8

Это не короче, но это касается и отдельных веток:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

Ответ 9

Для полноты, echo $(__git_ps1), по крайней мере в Linux, должен дать вам имя текущей ветки, заключенное в скобки.

Это может быть полезно в некоторых сценариях, поскольку это не команда git (хотя и зависит от git), особенно для настройки командной строки bash для отображения текущей ветки.

Например:

/mnt/c/git/ConsoleApp1 (test-branch)>echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)>git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)>echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)>cd ..
/mnt/c/git>echo $(__git_ps1)

/mnt/c/git>

Ответ 10

Когда вы используете git из Cloud Build, вы можете даже сократить его:

$ echo $BRANCH_NAME
master

Чтобы использовать его, см. Пример кода ниже:
- положить в cloudbuild.yaml файл с именем cloudbuild.yaml
- запустить репо (в настоящее время поддерживается только GitHub и BitBucket).

steps:
- name: 'gcr.io/cloud-builders/git'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
        echo $BRANCH_NAME

Ответ 11

Кто-то может найти это полезным (git show-branch --current). Текущая ветвь отмечена знаком *.

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master

Ответ 12

Просто использование git branch работает для меня.

Git версия: 2.13.2