Как получить текущее название ветки в Git? - PullRequest
2142 голосов
/ 06 июня 2011

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

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

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

Ответы [ 37 ]

4297 голосов
/ 27 августа 2012

Чтобы отобразить текущую ветку, в которой вы находитесь, без других перечисленных веток, вы можете сделать следующее:

git rev-parse --abbrev-ref HEAD

Справка:

1726 голосов
/ 06 июня 2011
git branch

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

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

476 голосов
/ 08 августа 2012

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

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

$ git symbolic-ref --short HEAD

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

$ git rev-parse --abbrev-ref HEAD

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

Примечание:

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

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

- Darien 26. март 2014

223 голосов
/ 25 октября 2013

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

  • местное отделение (мастер)
  • ветвь удаленного отслеживания, синхронизированная с локальной ветвью (источник / мастер при той же фиксации, что и мастер)
  • ветвь удаленного отслеживания, не синхронизированная с локальной ветвью (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)
    • субмодуль: (HEAD detached at 285f294)
    • общая отсоединенная головка: (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
    • общая отсоединенная головка: # HEAD detached at 285f294
  • git describe --all
    • местное отделение: heads/master
    • ветвь удаленного отслеживания (синхронно): heads/master (примечание: не remotes/origin/master)
    • ветвь удаленного отслеживания (не синхронизирована): remotes/origin/feature-foo
    • тег: v1.2.3
    • субмодуль: remotes/origin/HEAD
    • общая отсоединенная голова: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • местное отделение: ref: refs/heads/master
    • подмодуль: cat: .git/HEAD: Not a directory
    • все другие варианты использования: SHA соответствующего коммита
  • git rev-parse --abbrev-ref HEAD
    • местное отделение: master
    • все остальные варианты использования: HEAD
  • git symbolic-ref --short HEAD
    • местное отделение: master
    • все остальные варианты использования: fatal: ref HEAD is not a symbolic ref

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

131 голосов
/ 02 ноября 2015

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

git name-rev --name-only HEAD
92 голосов
/ 04 апреля 2012

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

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

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

И пока я там, один вкладыш, чтобы получить ветку удаленного отслеживания (если есть)

git rev-parse --symbolic-full-name --abbrev-ref @{u}
62 голосов
/ 06 июня 2011

Вы можете просто ввести в командной строке (консоли) в Linux, в каталоге хранилища:

$ git status

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

...
On branch master
...

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

32 голосов
/ 03 октября 2013
git symbolic-ref -q --short HEAD

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

25 голосов
/ 14 июня 2016
git branch | grep -e "^*" | cut -d' ' -f 2

покажет только название ветви

23 голосов
/ 25 мая 2018

git branch показывать только имя текущей ветви.

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

Чтобы показать только ту ветку, в которой вы находитесь, используйте:

git rev-parse --abbrev-ref HEAD
...