Как получить текущее название ветки в Git?

Я из фона Subversion и, когда у меня была ветка, я знал, над чем я работал, с "Эти рабочие файлы указывают на эту ветку".

Но с Git Я не уверен, когда редактирую файл в NetBeans или Notepad ++, независимо от того, привязан ли он к мастеру или другой ветке.

Нет проблем с git в bash, это говорит мне, что я делаю.

1413
задан mike628 05 июня '11 в 23:13
источник поделиться
27 ответов

git branch должен показывать все локальные ветки вашего репо. Разделяемая ветка - это ваша текущая ветка.

1035
ответ дан roberttdev 05 июня '11 в 23:17
источник поделиться
git rev-parse --abbrev-ref HEAD

Это отобразит текущую ветку.

Ссылка:

3162
ответ дан Jistanidiot 27 авг. '12 в 15:33
источник поделиться

У вас также есть git symbolic-ref HEAD, который отображает полный refspec.

Чтобы отобразить только название ветки в Git v1.8 и более поздних версиях (спасибо Грегу за указание на это):

$ git symbolic-ref --short HEAD

В Git v1.7 + вы также можете:

$ git rev-parse --abbrev-ref HEAD

Оба должны указывать одно и то же имя ветки, если вы находитесь на ветке. Если вы находитесь в отдельной голове, ответы различаются.

Примечание:

На более раннем клиенте это работает:

$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

- Дариен 26. Март 2014

362
ответ дан Wernight 08 авг. '12 в 18:55
источник поделиться

Для моей справки (но это может быть полезно для других) я сделал обзор большинства (основных команд), упомянутых в этом потоке, каждый из которых применим к нескольким прецедентам: HEAD (указывает на):

  • локальная ветвь (мастер)
  • ветвь удаленного отслеживания, синхронизированная с локальной ветвью (начало/мастер с тем же фиксацией, что и главный)
  • ветвь удаленного отслеживания, не синхронизированная с локальной ветвью (origin/feature-foo) тег
  • (v1.2.3)
  • общая отдельная головка (ни одна из перечисленных выше)

Результаты:

  • git branch | sed -n '/\* /s///p'
    • локальная ветвь: master
    • удаленная ветка отслеживания (синхронно): (detached from origin/master)
    • ветвь удаленного отслеживания (не синхронизирована): (detached from origin/feature-foo)
    • тег: (detached from v1.2.3)
    • общая отдельная головка: (detached from 285f294)
  • git status | head -1
    • локальная ветвь: # On branch master
    • ветвь удаленного отслеживания (в синхронизации): # HEAD detached at origin/master
    • ветвь удаленного отслеживания (не синхронизирована): # HEAD detached at origin/feature-foo
    • тег: # HEAD detached at v1.2.3
    • общая отдельная головка: # HEAD detached at 285f294
  • git describe --all
    • локальная ветвь: heads/master
    • ветвь удаленного отслеживания (в синхронизации): heads/master (примечание: не remotes/origin/master)
    • ветвь удаленного отслеживания (не синхронизирована): remotes/origin/feature-foo
    • тег: v1.2.3
    • общая отдельная головка: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • локальная ветвь: ref: refs/heads/master
    • все остальные варианты использования: SHA соответствующего фиксации
  • git rev-parse --abbrev-ref HEAD
    • локальная ветвь: master
    • все остальные варианты использования: HEAD
  • git symbolic-ref --short HEAD
    • локальная ветвь: master
    • все остальные варианты использования: fatal: ref HEAD is not a symbolic ref

(FYI это было сделано с помощью git версии 1.8.3.1)

147
ответ дан Stefaan 25 окт. '13 в 11:53
источник поделиться

Еще одна альтернатива:

git name-rev --name-only HEAD
105
ответ дан Filip Spiridonov 02 нояб. '15 в 22:17
источник поделиться

Хорошо достаточно просто, я получил его в одном лайнере (bash)

git branch | sed -n '/\* /s///p'

(кредит: ограниченное искупление)

И пока я там, один лайнер для получения удаленной ветки отслеживания (если есть)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
84
ответ дан Olivier Refalo 04 апр. '12 в 18:20
источник поделиться

Вы можете просто ввести командную строку (консоль) в Linux в каталоге репозитория:

$ git status

и вы увидите текст, среди которого что-то похожее на:

...
On branch master
...

что означает, что вы находитесь на ветке master. Если вы редактируете какой-либо файл в этот момент и находится в том же локальном репозитории (локальный каталог, содержащий файлы, находящиеся в Git управлении версиями), вы редактируете файл в этой ветке.

41
ответ дан Tadeck 05 июня '11 в 23:31
источник поделиться
git symbolic-ref -q --short HEAD

Я использую это в скриптах, которые нуждаются в текущем имени ветки. Он покажет вам текущую короткую символическую ссылку на HEAD, которая будет вашим текущим именем ветки.

25
ответ дан Kousha 03 окт. '13 в 1:09
источник поделиться
git branch | grep -e "^*" | cut -d' ' -f 2

будет отображаться только название ветки

21
ответ дан ungalcrys 14 июня '16 в 16:08
источник поделиться

Найденное решение командной строки той же длины, что и Oliver Refalo, используя хороший ol awk:

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

awk читает, что "делать вещи в {} в строках, соответствующих регулярному выражению". По умолчанию он принимает поля с разделителями пробелов, поэтому вы печатаете второй. Если вы можете предположить, что только строка с вашей ветвью имеет *, вы можете сбросить ^. Ах, bash гольф!

20
ответ дан Silas Barta 20 февр. '14 в 1:50
источник поделиться

вы можете использовать git bash в рабочем каталоге команда выполняется следующим образом

git status -b

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

-s

- короткая Дайте вывод в коротком формате.

-b --филиал Покажите информацию о филиале и отслеживании даже в коротком формате.

- фарфоровая [=] Дайте результат в формате простого для разбора скриптов. Это похоже на короткий вывод, но будет оставаться стабильным в версиях git и независимо от пользовательской конфигурации. Подробнее см. Ниже.

Параметр версии используется для указания версии формата. Это необязательно и по умолчанию используется формат оригинальной версии v1.

- долго Дайте результат в формате long-format. Это значение по умолчанию.

-v --подробный В дополнение к именам файлов, которые были изменены, также показываются текстовые изменения, которые поставлены для фиксации (т.е. Как вывод git diff --cached). Если -v указано дважды, то также отображаются изменения в рабочем дереве, которые еще не были поставлены (т.е. Как вывод git diff).

14
ответ дан Prateek Gangwal 08 дек. '16 в 15:19
источник поделиться
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
13
ответ дан Dziamid 23 янв. '12 в 20:11
источник поделиться

Почему бы не использовать приглашение оболочки git -aware, которое сообщит вам имя текущей ветки? git status также помогает.


Как git-prompt.sh от contrib/ делает (git версия 2.3.0), как определено в __git_ps1 вспомогательной функции

  • Во-первых, есть особый случай, если обнаружена перебазировка. Git использует неименованный филиал (отдельный HEAD) во время процесса переадресации, чтобы сделать его атомарным, а исходная ветвь сохраняется в другом месте.

  • Если файл .git/HEAD является символической ссылкой (очень редкий случай, из древней истории Git), он использует git symbolic-ref HEAD 2>/dev/null

  • В противном случае он читает файл .git/HEAD. Следующие шаги зависят от его содержимого:

    • Если этот файл не существует, то нет текущей ветки. Обычно это происходит, если репозиторий голый.

    • Если он начинается с префикса 'ref: ', то .git/HEAD является symref (символическая ссылка), и мы находимся на нормальной ветки. Удалите этот префикс, чтобы получить полное имя, и разделите refs/heads/ на короткое имя текущей ветки:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Если он не начинается с 'ref: ', тогда он отключен HEAD (анонимная ветвь), указывая непосредственно на некоторую фиксацию. Используйте git describe ..., чтобы записать текущую фиксацию в удобочитаемой форме.

Я надеюсь, что это поможет.

10
ответ дан Jakub Narębski 06 июня '11 в 1:25
источник поделиться

Следующая команда оболочки сообщает ветке, в которой вы находитесь.

git branch | grep ^\*

Если вы не хотите вводить эту длинную команду каждый раз, когда хотите узнать ветку, и используете Bash, дайте команде короткий псевдоним, например псевдоним cb, например.

alias cb='git branch | grep ^\*'

Когда вы находитесь в главном ветки, и ваше приглашение $, вы получите * master следующим образом.

$ cb
* master
10
ответ дан mrrusof 17 нояб. '16 в 0:19
источник поделиться

Со временем у нас может быть действительно длинный список ветвей.

В то время как некоторые из других решений велики, вот что я делаю (упрощенное от ответа Иакова):

git branch | grep \*

Теперь,

git status

работает, но только если есть локальные изменения

10
ответ дан karthikr 11 марта '14 в 23:41
источник поделиться

В Netbeans убедитесь, что аннотации версий включены (View → Show Versioning Этикетки). Затем вы можете увидеть название ветки рядом с именем проекта.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582

10
ответ дан Saroj 09 авг. '12 в 19:10
источник поделиться

У меня есть простой script, называемый git-cbr (текущая ветвь), которая выводит текущее название ветки.

#!/bin/bash

git branch | grep -e "^*"

Я помещаю этот script в пользовательскую папку (~/.bin). Папка находится в $PATH.

Итак, теперь, когда я нахожусь в репозитории git, просто просто наберите git cbr, чтобы распечатать текущее имя ветки.

$ git cbr
* master

Это работает, потому что команда git принимает свой первый аргумент и пытается запустить script, который называется именем git-arg1. Например, git branch пытается запустить script под названием git-branch и т.д.

9
ответ дан Diego Pino 03 мая '16 в 20:47
источник поделиться

Как насчет этого?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
9
ответ дан ShogunPanda 11 апр. '13 в 20:29
источник поделиться

Вы можете навсегда настроить свой bash вывод, чтобы показать ваше имя git -branch. Это очень удобно, когда вы работаете с разными ветвями, не нужно набирать $ git status все время. Github repo git -aware-prompt.

Откройте терминал (ctrl-alt-t) и введите команды

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git

Измените свой .bashrc командой sudo nano ~/.bashrc (для Ubuntu) и добавьте следующее вверху:

export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"

Затем вставьте код

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

в конце того же файла вы вставляли код установки ранее. Это даст вам раскрашенный результат: введите описание изображения здесь

7
ответ дан Kirill Zhuravlov 14 окт. '16 в 19:13
источник поделиться

Извините, это еще один ответ командной строки, но это то, что я искал, когда нашел этот вопрос, и многие из этих ответов были полезны. Моим решением является следующая функция оболочки bash:

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

Это всегда должно давать мне что-то как удобочитаемое, так и прямое использование в качестве аргумента git checkout.

  • в локальной ветке: feature/HS-0001
  • по помеченному фиксации (отсоединен): v3.29.5
  • на удаленной ветке (отсоединен, не отмечен): SHA1
  • для любой другой отдельной фиксации: SHA1
7
ответ дан dmaestro12 08 апр. '16 в 19:06
источник поделиться

Если вы действительно хотите, чтобы последняя ветвь/тег была выгружена в отдельном состоянии HEAD.

git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

Обновление Это лучше, если у вас есть и не боятся awk.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
6
ответ дан Ryan 20 авг. '14 в 8:40
источник поделиться

Добавьте его в PS1 с помощью Mac:

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

Перед запуском команды выше:

введите описание изображения здесь

После выполнения этой команды:

введите описание изображения здесь

Не беспокойтесь, если это не репозиторий GIT, он не отобразит ошибку из-за [-d .git], которая проверяет, существует ли папка .git или нет.

4
ответ дан Abdennour TOUMI 31 окт. '16 в 9:56
источник поделиться

Я знаю, что это поздно, но на linux/mac, из терминала вы можете использовать следующее.

git status | sed -n 1p

Пояснение:

git status → получает статус рабочего дерева
sed -n 1p → получает первую строку из тела статуса

Ответ на приведенную выше команду будет выглядеть следующим образом:

"On branch your_branch_name"
3
ответ дан skippy 21 авг. '14 в 1:41
источник поделиться

вы также можете использовать переменную GIT_BRANCH, как показано здесь: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Плагин git устанавливает несколько переменных среды, которые вы можете использовать в своих сценариях:

GIT_COMMIT - SHA текущего

GIT_BRANCH - имя используемой ветки, например. "master" или "origin/foo"

GIT_PREVIOUS_COMMIT - SHA предыдущего встроенного коммита из той же ветки (текущий SHA при первом построении в ветке)

GIT_URL - удаленный URL-адрес репозитория

GIT_URL_N - удаленные URL-адреса репозитория, когда имеется более 1 пульта дистанционного управления, например. GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - Отправитель/Авторская электронная почта

GIT_COMMITTER_EMAIL - сообщение коммитера/автора

3
ответ дан user3405314 11 марта '14 в 12:08
источник поделиться

Использование более ранних идей; при условии, что sha1 составляет 40 символов; и исправление ссылок (да, следует удалить строки отладочной печати: -):

git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
  from=$(NF - 2)
  to=$NF
  print from, to, length(from) > "/dev/stderr"
  if (length(from) != 40) { print from ; exit; }
  sha=substr(from, 1, 7)
  print sha > "/dev/stderr"
}
'

дает исходный вывод:

$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
2
ответ дан cagney 24 авг. '16 в 19:20
источник поделиться
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy

Прямая копия результата в картон. Благодаря @olivier-refalo для начала...

1
ответ дан SushiGrass Jacob 26 апр. '13 в 22:55
источник поделиться

Возвращает имя ветки или SHA1, когда на отдельной голове:

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

Это короткая версия ответа @dmaestro12 и без поддержки тегов.

0
ответ дан user 17 окт. '17 в 23:30
источник поделиться

Другие вопросы по меткам