37 Вопрос: Как получить текущее название ветки в Git?

вопрос создан в Thu, Nov 17, 2016 12:00 AM

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

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

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

    
2116
  1. Пусть ваша IDE отображает файл .git/HEAD, возможно, в родительском каталоге
    2012-02-04 12: 37: 02Z
  2. stackoverflow.com/questions/1417957/… $git rev-parse --abbrev-ref HEAD
    2014-02-28 10: 51: 51Z
  3. 2015-06-10 10: 20: 43Z
  4. С представлением - > Показать метки контроля версий в NetBeans, и все, что вам нужно сделать, это навести указатель мыши на папку Project (или File, или Favorite), чтобы увидеть текущую ветку.
    2015-09-30 00: 08: 49Z
  5. 2017-01-18 03: 44: 30Z
30 ответов                              30                         
 
git branch

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

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

 
git branch | grep \* | cut -d ' ' -f2
    
1702
2018-08-21 10: 32: 10Z
  1. Если вы хотите работать в Eclipse, есть программа с именем "eGit", имеющая графический интерфейс пользователя, который сообщит вам текущую ветку для всех репозиториев. В противном случае, я не знаю ... вы бы зависели от создателя того плагина, который вы хотите использовать, который совместим с выбранной вами программой (если есть).
    2011-06-05 20: 51: 02Z
  2. git branch | grep \*, чтобы возвратить только текущую ветвь (но все еще со звездочкой перед ней)
    2015-12-09 11: 54: 19Z
  3. git branch | grep \* | cut -d ' ' -f2 для разделения на пробел после звезды, возвращая только имя. Основано на комментарии @fboes
    2016-08-24 05: 08: 07Z
  4. git branch | grep \* | cut -d ' ' -f2- - я бы предложил небольшое изменение в комментарии @ jgraup (замените -f2 на -f2-), чтобы получить все после 1-го пробела, потому что в случае * (HEAD detached at ff3de3c) вы получите только (HEAD
    2017-02-02 14: 16: 14Z
  5. Кстати: git rev-parse --abbrev-ref HEAD (как упомянуто ниже) работает без лишних слов и возвращает текущее имя ветви без sed или grep
    2017-04-26 07: 43: 49Z

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

 
git rev-parse --abbrev-ref HEAD

Ссылка: р>

4260
2018-10-16 06: 13: 10Z
  1. @ ChrisNelson, поскольку он отображает только текущую ветвь, а не длинный список всех ветвей.
    2012-10-01 11: 37: 17Z
  2. Хороший, к сожалению, он не работает, если вы находитесь в состоянии «отсоединенного HEAD» (он просто выводит «HEAD», который совершенно бесполезен).
    2013-01-30 09: 38: 49Z
  3. Я предполагаю, что внутренняя часть git, если вы находитесь в состоянии «detached HEAD», не отслеживает ветвь, к которой она принадлежит, потому что git branch показывает * (no branch), что также бесполезно ...
    2013-01-30 09: 40: 15Z
  4. "git symbolic-ref --short HEAD" также работает для этой же цели
    2013-03-22 23: 30: 27Z
  5. git rev-parse --abbrev-ref HEAD 2>/dev/null Часть /dev /null предотвращает появление ошибки, если вы только что создали новый репозиторий, у которого еще нет HEAD.
    2013-06-14 14: 57: 55Z

У вас также есть 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\///"
     

- Дариен, 26 марта 2014 года.

    
474
2015-01-30 13: 49: 34Z
  1. Как и все другие ответы, это не работает, когда вы находитесь в состоянии «отсоединенного HEAD»
    2013-01-30 10: 09: 27Z
  2. @ CarlosCampderrós: ​​если вы находитесь в отключенном состоянии HEAD, нет такой вещи, как текущая ветвь. В конце концов, коммит, в котором вы находитесь, может быть достигнут нулевой, одной или несколькими ветвями.
    2014-01-07 14: 07: 22Z
  3. это создает проблемы в пустых репозиториях git, когда нет HEAD
    2015-03-31 20: 57: 57Z
  4. В git версии 2.4.4 git rev-parse --abbrev-ref HEAD показывает HEAD, когда вы находитесь на отсоединенной голове.
    2015-07-11 13: 37: 10Z
  5. Лучший ответ по-прежнему git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" , поскольку он будет отображать строку наподобие HEAD detached at a63917f в отключенном состоянии, в отличие от других ответов, которые ничего не показывают или HEAD. Это важно.
    2016-01-15 06: 12: 26Z

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

  • местный филиал (основной)
  • ветка удаленного отслеживания, синхронизированная с локальной веткой (origin /master при том же коммите, что и master)
  • ветка удаленного отслеживания, не синхронизированная с локальной веткой (origin /feature-foo)
  • тег
  • (версия 1.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)

    
216
2019-05-03 06: 37: 35Z
  1. Таким образом, ни один из них, похоже, не выполняет то, что я делал бы вручную.
    2015-02-04 19: 31: 30Z
  2. Это было очень полезно для меня: git describe --all --exact-match 2>/dev/null | sed 's=.*/==' было лучшим решением для меня (хорошие имена для тегов и заголовков веток, без вывода для случайных отсоединенных головок.
    2015-05-18 09: 31: 00Z
  3. Однако я только что обнаружил, что использование git describe имеет серьезный сбой, когда несколько ветвей ссылаются на один и тот же коммит, например, сразу после git checkout -b foo - он использует один из них произвольно (кажется, возможно, самый последний созданный). Я изменю свою стратегию на использование отфильтрованных выходных данных с git branch и использую только git describe, если в результате получится что-то с отсоединенной головой.
    2015-05-20 07: 31: 10Z
  4. На самом деле, мне нужно использовать git branch --no-color, чтобы убедиться, что в имени файла нет надоедливых кодов выхода терминала.
    2015-05-20 07: 48: 05Z
  5. Это было действительно полезно для меня не раз, спасибо за такую ​​тщательность!
    2016-11-03 12: 37: 07Z

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

 
git name-rev --name-only HEAD
    
131
2015-11-02 19: 17: 08Z
  1. его также можно получить с помощью echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
    2016-03-16 14: 24: 04Z
  2. Это не работает, если HEAD одинаково для главной и функциональной ветвей (например, во время слияния). Он возвращает 'master', даже если выполняется в ветви объектов.
    2016-04-06 09: 05: 19Z
  3. git checkout master && git name-rev --name-only HEAD # ac-187 Не работает должным образом
    2016-05-19 13: 41: 10Z
  4. Я сохраняю это в переменную непосредственно перед слиянием, а также в случаях, когда мой HEAD может быть отсоединен, если я извлекаю конкретный коммит. В этом случае это работает нормально.
    2016-11-12 17: 16: 40Z
  5. Я делаю это из конвейера Дженкинса. Так что, похоже, это лучший ответ для меня. Выполнение git branch --list просто говорит * (HEAD detached at 7127db5). Выполнение git rev-parse --abbrev-ref HEAD просто говорит HEAD и так далее.
    2017-06-19 11: 53: 42Z

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

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

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

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

 
git rev-parse --symbolic-full-name --abbrev-ref @{u}
    
91
2013-06-18 20: 09: 47Z
  1. Слишком много косых черт! :) sed -n 's/\* //p' делает свое дело. Хотя я склоняюсь к параноику, поэтому я бы привязал его к sed -n 's/^\* //p'.
    2014-08-04 14: 45: 15Z

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

 
$ git status

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

 
...
On branch master
...

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

    
62
2011-06-05 20: 31: 31Z
  1. Исходя из того, что вы хотите сделать, вы можете использовать git status и получить только первую строку вывода с git status | head -1, что дает что-то вроде # On branch master. Я уверен, что различия версий также должны быть учтены.
    2011-12-31 20: 43: 38Z
  2. @ JoshPinter: Вы также можете использовать git status | grep 'On branch', что должно иметь тот же эффект (не означает, что так будет, если ваша версия Git отображает его по-другому). Или git branch | grep '*', который покажет название ветви со звездой в начале.
    2012-01-01 00: 38: 34Z
  3. Да, это работает также и может быть более гибким. Мой конечный результат для отображения только имени ветки в приложении dev Rails был: <tick>git status | head -1<tick>.gsub('# On branch ', '')
    2012-01-04 19: 45: 26Z
  4. git status может занять много времени, чтобы вернуть значение, если имеется много управляемых файлов.
    2016-05-09 23: 53: 54Z
 
git symbolic-ref -q --short HEAD

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

    
32
2013-10-02 22: 09: 51Z
  1. Спасибо, отлично работает! - Я также добавляю "-C path_to_folder" в моем скрипте с этим.
    2015-08-06 10: 02: 54Z
  2. Это хорошее решение, поскольку с параметром -q он возвращает код ошибки в состоянии «detached HEAD», но ничего не печатает в stderr.
    2019-03-31 16: 26: 17Z
  3. это единственное решение, которое сработало для меня на новом репо без каких-либо коммитов
    2019-04-14 11: 55: 48Z
 
git branch | grep -e "^*" | cut -d' ' -f 2

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

    
25
2016-06-14 13: 08: 32Z
  1. Если ваша ветка показывает что-то вроде этого "* (HEAD отсоединен в SUM_BRANCH_01)", то попробуйте эту "git branch | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 "
    2016-08-04 21: 42: 32Z
  2. Я только что создал точно такой же сценарий, чтобы получить текущее имя ветви. Я подумал, что это может помочь с разницей.
    2016-08-09 04: 57: 27Z

Нашел решение командной строки той же длины, что и решение Оливера Рефало , используя добрый старый awk:

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

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

    
23
2017-05-23 12: 10: 45Z

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

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

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

 
git rev-parse --abbrev-ref HEAD
    
23
2018-05-25 05: 33: 58Z
  1. git branch --contains тоже работает
    2018-06-20 06: 14: 15Z
  2. это отлично подходит для ci и других инструментов сборки!
    2018-07-07 13: 15: 14Z
  3. лучший ответ для использования в сценарии
    2018-08-03 05: 55: 29Z
  4. @ DylanNicholson git branch --contains иногда перечисляет более одной ветви.
    2018-08-03 11: 21: 41Z
 
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch
    
18
2012-01-23 17: 11: 04Z

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

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

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

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

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

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

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

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

Надеюсь, это поможет.

    
17
2015-02-20 17: 51: 04Z
  1. А если вы разрабатываете подсказку оболочки с поддержкой git, какой из ответов здесь следует использовать? Черепахи все время вниз.
    2015-02-18 11: 52: 34Z
  2. @ tripleee: заимствовать идеи у github.com/git/git/blob/master/contrib/completion/git-prompt.sh
    2015-02-18 12: 00: 56Z
  3. Который для записи, кажется, делает git describe --contains --all HEAD, что в настоящее время я не вижу в других местах на этой странице. Как я уверен, вы знаете, что только ссылки не рекомендуются в StackOverflow.
    2015-02-18 12: 11: 08Z
  4. @ tripleee: я добавил объяснение, как это делает git-prompt.sh (он же __git_ps1) ...
    2015-02-20 17: 51: 49Z

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

 
git status -b

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

 
-s

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

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

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

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

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

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

    
15
2016-12-08 12: 19: 10Z

Извините, это еще один ответ из командной строки, но именно это я и искал, когда нашел этот вопрос, и многие из этих ответов были полезны. Мое решение - следующая функция оболочки 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
14
2016-04-08 16: 06: 03Z
  1. Спасибо за публикацию этого сообщения, ни один из других ответов, похоже, не заботился о том, чтобы всегда выдавать что-то пригодное для использования в качестве аргумента git checkout.
    2018-12-09 16: 43: 41Z

Менее шумная версия для статуса git поможет.

 
git status -bsuno

Распечатывает

 
## branch-name
    
14
2018-03-21 23: 55: 06Z
  1. ## Develop ... origin /develop
    2018-08-10 18: 57: 35Z

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

Хотя некоторые другие решения хороши, вот что я делаю (упрощенно из ответа Джейкоба):

 
git branch | grep \*

Теперь,

 
git status

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

    
13
2014-03-11 20: 41: 19Z

Я рекомендую использовать любую из этих двух команд.

git branch | grep -e "^*" | cut -d' ' -f 2

ИЛИ р>

git status | sed -n 1p | cut -d' ' -f 3

ИЛИ (более подробный)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p

    
13
2018-04-29 14: 12: 33Z

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

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

12
2012-08-09 16: 10: 44Z
  1. Если включены аннотации управления версиями, все, что вам нужно сделать, - навести указатель мыши на папку Project (или File, или Favorite), чтобы увидеть текущую ветвь.
    2015-09-30 00: 06: 23Z

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

 
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
    
12
2013-04-11 17: 29: 29Z
  1. Гораздо лучший ответ, потому что он хорошо обрабатывает отдельный случай HEAD.
    2013-06-13 19: 11: 27Z
  2. Похоже, вы должны использовать () not {} для переноса команд git
    2013-06-13 19: 45: 26Z
  3. @ Pat Для этого не нужно создавать отдельный подоболочек, как это делает (). {} хорошо, за исключением того, что вам нужно добавить; или перевод строки перед}. На самом деле, вы можете просто полностью исключить {}, если вам не нужно группировать команды.
    2015-02-28 15: 51: 02Z
  4. Разве часть symbolic-ref также не нуждается в --short, чтобы избежать префикса отраслевого имени с refs/heads/?
    2018-01-02 15: 41: 39Z

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

 
#!/bin/bash

git branch | grep -e "^*"

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

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

 
$ git cbr
* master

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

    
11
2016-05-03 17: 47: 25Z

Начиная с версии 2.22, вы можете просто использовать:

 
git branch --show-current
    
11
2019-06-07 22: 09: 24Z
  1. Да, я упоминал об этом в марте прошлого года в комментариях к этой странице: stackoverflow.com/questions/6245570/… . И в stackoverflow.com/a/55088865/6309
    2019-06-07 22: 37: 06Z

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

 
git branch | grep ^\*

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

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

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

 
$ cb
* master
    
10
2016-11-16 21: 54: 33Z
  1. Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под своим постом. - Из обзора
    2016-11-16 21: 36: 21Z
  2. Почему вы так думаете?
    2016-11-16 21: 44: 54Z
  3. вы должны прокомментировать и описать свой пост для OP, чтобы его было легче понять.
    2016-11-16 21: 46: 39Z
  4. Имеет смысл.
    2016-11-16 21: 52: 00Z
  5. если вы используете zsh, вам нужно заключить регулярное выражение grep в одинарные кавычки: git branch | grep '^\*'
    2017-03-06 19: 49: 23Z

Вы можете постоянно настраивать вывод bash, чтобы отображать имя вашей ветки git. Это очень удобно, когда вы работаете с разными ветками, не нужно все время набирать $ git status. Репозиторий Github 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\]\$ "

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

    
10
2017-11-03 18: 39: 35Z
  1. wow fancy fancy
    2018-08-10 19: 05: 53Z

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

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

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

 
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
    
8
2015-09-29 23: 56: 53Z
  1. rev | cut -d' ' -f1| rev можно упростить с awk '{print $NF}'
    2015-01-18 02: 03: 22Z
  2. Хотя это и не является надежной версией, поскольку вы можете извлечь конкретную ревизию по хешу, так что в reflog просто отображается checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9, это все же полезный трюк, который может помочь устранить неоднозначность в некоторых случаях.
    2015-05-18 11: 48: 44Z
  3. Далее сокращено до git reflog | awk '$3=="checkout:" {print $NF; exit}'
    2016-03-06 02: 06: 07Z
 
git status 

также даст название ветви вместе с изменениями.

например.

 
>git status
On branch master // <-- branch name here
.....
    
8
2018-06-13 00: 10: 59Z

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

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

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

    
7
2017-10-17 20: 30: 02Z
  1. лучше: git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
    2017-11-10 11: 57: 08Z

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

 
git status | sed -n 1p

Пояснение:

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

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

 
"On branch your_branch_name"
    
6
2014-08-20 22: 41: 37Z
  1. head -1 будет обычным способом
    2015-02-04 19: 28: 58Z

вы также можете использовать переменную 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 - электронная почта коммиттера /автора

    
5
2014-03-11 09: 08: 03Z

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

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

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

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

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

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

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

    
5
2016-10-31 06: 56: 02Z
источник размещен Вот