Ответ 1
git branch
должны показать все локальные ветки вашего репо. Помеченная ветвь - это ваша текущая ветка.
Если вы хотите получить только название ветки, в которой вы находитесь, вы можете сделать:
git branch | grep \* | cut -d ' ' -f2
Я из фона Subversion и, когда у меня была ветка, я знал, над чем я работал, с "Эти рабочие файлы указывают на эту ветку".
Но с Git Я не уверен, когда редактирую файл в NetBeans или Notepad ++, независимо от того, привязан ли он к мастеру или другой ветке.
Нет проблем с git
в bash, это говорит мне, что я делаю.
git branch
должны показать все локальные ветки вашего репо. Помеченная ветвь - это ваша текущая ветка.
Если вы хотите получить только название ветки, в которой вы находитесь, вы можете сделать:
git branch | grep \* | cut -d ' ' -f2
Чтобы отобразить текущую ветку, в которой вы находитесь, без других перечисленных веток, вы можете сделать следующее:
git rev-parse --abbrev-ref HEAD
Ссылка:
У вас также есть 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
Для моей собственной справки (но это может быть полезно для других) я сделал обзор большинства (основных командных строк) методов, упомянутых в этом потоке, каждый из которых применяется к нескольким случаям использования: HEAD is (указывает на):
Результаты:
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
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)
Еще одна альтернатива:
git name-rev --name-only HEAD
Хорошо достаточно просто, я получил его в одном лайнере (bash)
git branch | sed -n '/\* /s///p'
(кредит: ограниченное искупление)
И пока я там, один лайнер для получения удаленной ветки отслеживания (если есть)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Вы можете просто ввести командную строку (консоль) в Linux в каталоге репозитория:
$ git status
и вы увидите текст, среди которого что-то похожее на:
...
On branch master
...
что означает, что вы находитесь на ветке master
. Если вы редактируете какой-либо файл в этот момент и находится в том же локальном репозитории (локальный каталог, содержащий файлы, находящиеся в Git управлении версиями), вы редактируете файл в этой ветке.
git symbolic-ref -q --short HEAD
Я использую это в скриптах, которые нуждаются в текущем имени ветки. Он покажет вам текущую короткую символическую ссылку на HEAD, которая будет вашим текущим именем ветки.
git branch | grep -e "^*" | cut -d' ' -f 2
будет отображаться только название ветки
Найденное решение командной строки той же длины, что и Oliver Refalo, используя хороший ol awk:
git branch | awk '/^\*/{print $2}'
awk
читает, что "делать вещи в {}
в строках, соответствующих регулярному выражению". По умолчанию он принимает поля с разделителями пробелов, поэтому вы печатаете второй. Если вы можете предположить, что только строка с вашей ветвью имеет *, вы можете сбросить ^. Ах, bash гольф!
git branch
показывает только текущее имя ветки.
Хотя ветка git покажет вам все ветки и выделит текущую звездочку звездочкой, она может быть слишком громоздкой при работе с большим количеством веток.
Чтобы показать только ту ветку, в которой вы находитесь, используйте:
git rev-parse --abbrev-ref HEAD
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
Почему бы не использовать приглашение оболочки 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 ...
, чтобы записать текущую фиксацию в удобочитаемой форме.
Я надеюсь, что это поможет.
вы можете использовать git bash в рабочем каталоге команда выполняется следующим образом
git status -b
он расскажет вам, на какой ветке вы находитесь есть много полезных команд, некоторые из которых
-s
- короткая Дайте вывод в коротком формате.
-b --филиал Покажите информацию о филиале и отслеживании даже в коротком формате.
- фарфоровая [=] Дайте результат в формате простого для разбора скриптов. Это похоже на короткий вывод, но будет оставаться стабильным в версиях git и независимо от пользовательской конфигурации. Подробнее см. Ниже.
Параметр версии используется для указания версии формата. Это необязательно и по умолчанию используется формат оригинальной версии v1.
- долго Дайте результат в формате long-format. Это значение по умолчанию.
-v --подробный В дополнение к именам файлов, которые были изменены, также показываются текстовые изменения, которые поставлены для фиксации (т.е. Как вывод git diff --cached). Если -v указано дважды, то также отображаются изменения в рабочем дереве, которые еще не были поставлены (т.е. Как вывод git diff).
Извините, это еще один ответ командной строки, но это то, что я искал, когда нашел этот вопрос, и многие из этих ответов были полезны. Моим решением является следующая функция оболочки 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
Со временем у нас может быть действительно длинный список ветвей.
В то время как некоторые из других решений велики, вот что я делаю (упрощенное от ответа Иакова):
git branch | grep \*
Теперь,
git status
работает, но только если есть локальные изменения
Я рекомендую использовать любую из этих двух команд.
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
Менее шумная версия для статуса git поможет
git status -bsuno
Распечатывает
## branch-name
В Netbeans убедитесь, что аннотации версий включены (View → Show Versioning Этикетки). Затем вы можете увидеть название ветки рядом с именем проекта.
Как насчет этого?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
У меня есть простой 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
и т.д.
Вы можете навсегда настроить свой 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\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "
в конце того же файла вы вставляли код установки ранее. Это даст вам раскрашенный результат:
Следующая команда оболочки сообщает ветке, в которой вы находитесь.
git branch | grep ^\*
Если вы не хотите вводить эту длинную команду каждый раз, когда хотите узнать ветку, и используете Bash, дайте команде короткий псевдоним, например псевдоним cb
, например.
alias cb='git branch | grep ^\*'
Когда вы находитесь в главном ветки, и ваше приглашение $
, вы получите * master
следующим образом.
$ cb
* master
Если вы действительно хотите, чтобы последняя ветвь/тег была выгружена в отдельном состоянии HEAD.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
Обновление Это лучше, если у вас есть и не боятся awk.
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
git status
также даст название ветки вместе с изменениями.
например
>git status
On branch master // <-- branch name here
.....
Возвращает имя ветки или SHA1, когда на отдельной голове:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
Это короткая версия ответа @dmaestro12 и без поддержки тегов.
Я знаю, что это поздно, но на linux/mac, из терминала вы можете использовать следующее.
git status | sed -n 1p
Пояснение:
git status → получает статус рабочего дерева
sed -n 1p → получает первую строку из тела статуса
Ответ на приведенную выше команду будет выглядеть следующим образом:
"On branch your_branch_name"
вы также можете использовать переменную 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 - электронная почта коммиттера/автора
Добавьте его в PS1
используя Mac:
PS1='\[email protected]\u >'[ -d .git ] && git branch | grep ^*|cut -d" " -f2'> $ '
Перед запуском команды выше:
После выполнения этой команды:
Не беспокойтесь, если это не GIT-репозиторий, он не будет отображать ошибку из-за [-d.git]
который проверяет, существует ли папка .git
или нет.
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy
Прямая копия результата в картон. Благодаря @olivier-refalo для начала...