Я из Subversion, и когда у меня была ветка, я знал, над чем я работал, «Эти рабочие файлы указывают на эту ветку».
Но с Git я не уверен, когда я редактирую файл в NetBeans или Notepad ++, привязан ли он к мастеру или другой ветке.
Там нет проблем с git
Bash, он говорит мне, что я делаю.
git
branch
git-branch
mike628
источник
источник
.git/HEAD
, возможно, в родительском каталогеgit branch --show-current
. Смотрите мой ответ здесь .Ответы:
должны показать все локальные филиалы вашего репо. Помеченная ветвь - это ваша текущая ветка.
Если вы хотите получить только название филиала, в котором вы находитесь, вы можете сделать:
источник
git checkout --orphan foo
потомgit branch
не удалось показать веткуfoo
. Принимая во внимание,git symbolic-ref HEAD
что предложенный другой ответ работал.Чтобы отобразить текущую ветку, в которой вы находитесь, без других перечисленных веток, вы можете сделать следующее:
Ссылка:
источник
git branch
показывает* (no branch)
, что также бесполезно ...git rev-parse --abbrev-ref HEAD 2>/dev/null
Часть / dev / null предотвращает появление ошибки, если вы только что создали новый репозиторий, у которого еще нет HEAD.У вас также есть,
git symbolic-ref HEAD
который отображает полный refspec.Чтобы показать только имя ветки в Git v1.8 и более поздних версиях (спасибо Greg за это):
На Git v1.7 + вы также можете сделать:
Оба должны дать одно и то же имя ветви, если вы находитесь на ветви. Если у вас отстраненная голова, ответы отличаются.
источник
git rev-parse --abbrev-ref HEAD
показывает,HEAD
когда вы находитесь на отстраненной голове.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
поскольку он будет отображать строку, какHEAD detached at a63917f
в отключенном состоянии, в отличие от других ответов, которые ничего не показывают или HEAD. Это важно.Для моей собственной справки (но это может быть полезно для других) я сделал обзор большинства (основных командных строк) методов, упомянутых в этом потоке, каждый из которых применяется к нескольким случаям использования: 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 describe --all --exact-match 2>/dev/null | sed 's=.*/=='
было лучшим решением для меня (хорошие имена для тегов и заголовков веток, нет выводов для случайных отсоединенных головок.git describe
имеет серьезный сбой, когда несколько ветвей ссылаются на один и тот же коммит, например, сразу после этогоgit checkout -b foo
- он использует одну из них произвольно (кажется, возможно, самой последней созданной). Я изменю свою стратегию, чтобы использовать отфильтрованный вывод изgit branch
и использовать только в томgit describe
случае, если результат будет что-то о отсоединенной голове.git branch --no-color
чтобы убедиться, что в имени файла нет надоедливых кодов выхода терминала.Начиная с версии 2.22, вы можете просто использовать:
Согласно справочной странице:
источник
Еще одна альтернатива:
источник
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Это не работает, как ожидалосьgit branch --list
просто говорит* (HEAD detached at 7127db5)
. Делатьgit rev-parse --abbrev-ref HEAD
просто говоритHEAD
и так далее.Ну, достаточно просто, я получил его в один лайнер (Баш)
(кредит: ограниченное искупление)
И пока я там, один вкладыш, чтобы получить ветку удаленного отслеживания (если есть)
источник
sed -n 's/\* //p'
делает свое дело. Хотя я склоняюсь к параноику, поэтому я бы закрепил егоsed -n 's/^\* //p'
.Вы можете просто набрать в командной строке (консоли) в Linux, в каталоге хранилища:
и вы увидите некоторый текст, среди которого что-то похожее на:
что означает, что вы в настоящее время на
master
ветке. Если вы редактируете какой-либо файл в тот момент, и он находится в том же локальном репозитории (локальный каталог, содержащий файлы, находящиеся под управлением контроля версий Git), вы редактируете файл в этой ветке.источник
git status
и получать только первую строку вывода, сgit status | head -1
которой получается что-то вроде# On branch master
. Я уверен, что различия версий также должны быть учтены.git status | grep 'On branch'
, что должно иметь тот же эффект (если не означает, что так будет, если ваша версия Git отображает его по-другому). Илиgit branch | grep '*'
, который покажет название ветви со звездой в начале.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
может потребоваться много времени, чтобы вернуть значение, если существует много файлов, управляемых.git status
может сократить время генерации всей страницы.Я использую это в сценариях, которым нужно текущее имя ветви. Он покажет вам текущую краткую символическую ссылку на HEAD, которая будет вашим текущим именем ветви.
источник
покажет только название ветки
источник
git branch
показывать только текущее название веткиХотя ветка git покажет вам все ветви и выделит текущую звездочку звездочкой, она может быть слишком громоздкой при работе с большим количеством веток.
Чтобы показать только ту ветку, в которой вы находитесь, используйте:
источник
git branch --contains
иногда перечисляет более одной ветви.Нашел решение командной строки той же длины, что и у Оливера Рефало , используя хороший старый awk:
awk
читает это как "делать вещи в{}
строках, соответствующих регулярному выражению". По умолчанию он принимает поля, разделенные пробелами, поэтому вы печатаете второе. Если вы можете предположить, что только строка с вашей веткой имеет *, вы можете удалить ^. Ах, баш гольф!источник
источник
Почему бы не использовать приглашение оболочки git-aware, которое сообщит вам название текущей ветки?
git status
также помогает.Как git-prompt.sh из
contrib/
делает это (мерзавец версия 2.3.0), как это определено в__git_ps1
вспомогательной функции:Во- первых, есть особый случай , если перебазироваться в процессе обнаружения. Git использует неназванную ветвь (detached HEAD) во время процесса ребазирования, чтобы сделать его атомарным, а оригинальная ветка сохраняется в другом месте.
Если
.git/HEAD
файл является символической ссылкой (очень редкий случай из древней истории Git), он используетgit symbolic-ref HEAD 2>/dev/null
Еще, он читает
.git/HEAD
файл. Следующие шаги зависят от его содержания:Если этот файл не существует, то нет текущей ветви. Это обычно происходит, если репозиторий пуст.
Если он начинается с
'ref: '
префикса, то.git/HEAD
это symref (символьная ссылка), и мы находимся на нормальной ветке. Удалите этот префикс, чтобы получить полное имя, и обрезайте,refs/heads/
чтобы получить короткое имя текущей ветви:Если он не начинается с
'ref: '
, то это отдельная HEAD (анонимная ветвь), указывающая непосредственно на какой-то коммит. Используйтеgit describe ...
для записи текущего коммита в удобочитаемой форме.Надеюсь, это поможет.
источник
git describe --contains --all HEAD
что я в настоящее время не вижу в других местах на этой странице. Как я уверен, вы знаете, что только ссылки не рекомендуются в StackOverflow.git-prompt.sh
(иначе__git_ps1
) это делает ...Менее шумная версия для статуса git поможет
Распечатывает
источник
Извините, это еще один ответ из командной строки, но это то, что я искал, когда нашел этот вопрос, и многие из этих ответов были полезны. Мое решение - следующая функция оболочки bash:
Это всегда должно давать мне что-то как читаемое человеком, так и непосредственно используемое в качестве аргумента
git checkout
.feature/HS-0001
v3.29.5
источник
git checkout
.вы можете использовать git bash для команды рабочего каталога следующим образом
он скажет вам, в какой ветке вы находитесь, есть много команд, которые полезны, некоторые из них
--short Дать вывод в коротком формате.
-b --branch Показывать информацию о ветках и отслеживании даже в коротком формате.
--porcelain [=] Предоставить вывод в простом для анализа формате для сценариев. Это похоже на короткий вывод, но останется стабильным во всех версиях Git и независимо от конфигурации пользователя. Смотрите ниже для деталей.
Параметр version используется для указания версии формата. Это необязательно и по умолчанию используется формат оригинальной версии v1.
--long Дать вывод в длинном формате. Это по умолчанию.
-v --verbose В дополнение к именам файлов, которые были изменены, также показывают текстовые изменения, которые должны быть зафиксированы (например, вывод git diff --cached). Если -v указан дважды, то также показывают изменения в рабочем дереве, которые еще не были подготовлены (например, вывод git diff).
источник
также даст название ветви вместе с изменениями.
например
источник
Со временем у нас может появиться очень длинный список ветвей.
Хотя некоторые другие решения хороши, я делаю вот что (упрощенно из ответа Джейкоба):
Сейчас же,
работает, но только если есть какие-то локальные изменения
источник
Я рекомендую использовать любую из этих двух команд.
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
источник
В Netbeans убедитесь, что аннотации управления версиями включены (Вид -> Показать метки версий). Затем вы можете увидеть название ветви рядом с именем проекта.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
источник
Что насчет этого?
источник
symbolic-ref
часть не должна--short
избегать префикса фирменного названия сrefs/heads/
?У меня есть простой скрипт с именем
git-cbr
( текущая ветвь ), который выводит текущее имя ветви.Я положил этот скрипт в пользовательскую папку (
~/.bin
). Папка находится в$PATH
.Так что теперь, когда я в git-репо, я просто
git cbr
печатаю имя текущей ветви.Это работает, потому что
git
команда берет свой первый аргумент и пытается запустить скрипт, который называетсяgit-arg1
. Например,git branch
пытается запустить скрипт с именемgit-branch
и т. Д.источник
Вы можете навсегда настроить вывод bash, чтобы показать имя вашей git-ветви. Это очень удобно, когда вы работаете с разными ветками, не нужно вводить
$ git status
все время. Github repo git-aware-prompt .Откройте свой терминал (ctrl-alt-t) и введите команды
Отредактируйте ваш .bashrc с помощью
sudo nano ~/.bashrc
команды (для Ubuntu) и добавьте следующее:Затем вставьте код
в конце того же файла вы вставили код установки в ранее. Это даст вам цветной вывод:
источник
Следующая команда оболочки сообщает вам ветку, в которой вы находитесь.
Если вы не хотите вводить эту длинную команду каждый раз, когда хотите узнать ветку, и используете Bash, присвойте команде короткий псевдоним, например псевдоним
cb
, например, так.Когда вы находитесь в ветке master, и
$
вы получаете приглашение , вы получите* master
следующее.источник
git branch | grep '^\*'
Возвращает либо имя ветви, либо SHA1, когда на отсоединенной головке:
Это короткая версия ответа @ dmaestro12 без поддержки тегов.
источник
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Если вы действительно хотите, чтобы последняя ветка / тег были извлечены также в отключенном состоянии HEAD.
Обновление Это лучше, если у вас есть и не боятся awk.
источник
rev | cut -d' ' -f1| rev
может быть упрощенаawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
что это все еще полезный прием, который может помочь устранить неоднозначность в некоторых случаях.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Я знаю, что уже поздно, но на Linux / Mac из терминала вы можете использовать следующее.
Объяснение:
git status -> получает статус рабочего дерева
sed -n 1p -> получает первую строку из тела статуса
Ответ на приведенную выше команду будет выглядеть следующим образом:
источник
head -1
будет обычным способомвы также можете использовать переменную 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:Перед запуском команды выше:
После выполнения этой команды:
Не беспокойтесь, если это не GIT-репозиторий, он не будет отображать ошибку, из-за
[-d .git]
которой проверяется,.git
существует ли папка или нет.источник