Питання Як отримати поточну назву гілки в Git?


Я з фону Subversion, і, коли у мене була філія, я знав, що я працюю з "Ці робочі файли вказують на цю гілку".

Але з Git я не впевнений, коли редагую файл у NetBeans або Notepad ++, незалежно від того, чи пов'язаний він з майстром чи іншою гілкою.

З цим проблем немає git в баш, це говорить мені, що я роблю.


1718
2018-06-05 20:13


походження


Нехай ваш IDE відображає файл .git/HEAD, можливо, у батьківському каталозі - Tino
stackoverflow.com/questions/1417957/... $ git rev-parse --abbrev-ref HEAD - fantastory
можливий дублікат Як програмно визначити поточну перевірену гітську гілку - tripleee
За допомогою пункту «Перегляд» -> «Показати ярлики для версії» в NetBeans, то вам потрібно лише навести курсор на папку «Проект» (або «Файл» або «Улюблений»), щоб переглянути поточну гілку. - idclaar
Можливі дублікати Показати лише поточну гілку в Git - techraf


Відповіді:


git branch

повинен відображати всі місцеві гілки вашого репо. Зіркова галузь - це ваша поточна гілка.


1298
2018-06-05 20:17



Якщо ви готові працювати в Eclipse, є програма під назвою "eGit", яка має графічний інтерфейс, який покаже поточну гілку для всіх репо в ньому. В іншому випадку я не знаю .. ти будеш на благо творця будь-якого плагіна, який ви хочете використовувати, що сумісно з вашим вибором програми (якщо є). - roberttdev
git branch | grep \* щоб повернути лише поточну гілку (але все-таки з зіркою перед нею) - fboes
git branch | grep \* | cut -d ' ' -f2 щоб розділити на просторі після зірки, повертаючи тільки ім'я. На основі коментарів від @fboes - jgraup
git branch | grep \* | cut -d ' ' -f2- - Я б запропонував невелику зміну до коментарю @ jgraup (замінити -f2 з -f2-), щоб отримати все після 1-го місця, тому що у випадку * (HEAD detached at ff3de3c) Ви отримуєте (HEAD тільки - boobiq
BTW: git rev-parse --abbrev-ref HEAD (як зазначено нижче) працює без будь-яких додаткових помилок, і повертає поточну назву гілки без sed або grep - fboes


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

Це покаже поточну гілку.

Довідка:


3642
2017-08-27 12:33



@ ChrisNelson, оскільки він відображає лише поточну гілку, а не довгий список всіх гілок. - avakar
Добре, на жаль, це не спрацьовує, якщо ви перебуваєте у стані "відключеної голови" (це просто видає "HEAD", що абсолютно марно). - Carlos Campderrós
Я думаю, внутрішніми органами git, якщо ви перебуваєте в стані "відокремленого голови", немає відстеження галузі, до якої він належить, тому що git branch шоу * (no branch), що також марно ... - Carlos Campderrós
"git symbolic-ref - короткий HEAD" також працює для цієї ж мети - dusktreader
git rev-parse --abbrev-ref HEAD 2>/dev/null  Параметр / dev / null не дозволяє бачити помилку, якщо ви тільки створили нове сховище, яке ще не було HEAD. - Paradiesstaub


Ви також маєте 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 р


399
2017-08-08 15:55



Як і всі інші відповіді, це не спрацьовує, коли ви перебуваєте в стані "відключеної голови" - Carlos Campderrós
@ CarlosCampderrós: ​​якщо ви знаходитесь у відключеному стані HEAD, немає такої речі, як поточна гілка. Зрештою, фіксація, в якій ви знаходитесь, може бути доступною нульовою, однією чи декількома гілками. - Flimm
це призводить до проблем у порожніх сховищах GIT, коли HEAD немає - Arne
З git версія 2.4.4 git rev-parse --abbrev-ref HEAD шоу HEAD коли ти на відокремленій голові. - peterhil
Найкраща відповідь досі git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"  оскільки він буде відображати рядок, як HEAD detached at a63917f коли в індивідуальному стані, на відміну від інших відповідей, які показують або нічого, або HEAD. Це важливо. - Alkaline


Для моєї власної довідки (але це може бути корисно іншим) я зробив огляд більшості (основних командного рядка) методів, згаданих у цій гілці, кожен застосував до декількох випадків використання: 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)


167
2017-10-25 08:53



Таким чином, ніхто, схоже, не робить те, що я б вручну. - bukzor
Це було дуже корисно для мене: git describe --all --exact-match 2>/dev/null | sed 's=.*/==' було найкращим рішенням для мене (хороші імена для тегів та гілок голови, немає виводу для випадкових окремих головок. - Alex Dupuy
Однак я просто виявив, що використовую git describe має серйозне невдале місце, коли є декілька філій, що посилаються на ті самі зобов'язання, наприклад, відразу після git checkout -b foo - він використовує один з них довільно (здається, можливо, що був створений останнім). Я зміню свою стратегію на використання відфільтрованого виводу з git branch і використовувати тільки git describe якщо результат є чимось індивідуальним головою. - Alex Dupuy
Насправді, мені потрібно користуватися git branch --no-color щоб переконатись, що ім'я файлу не містить дратівливих термінальних евакуаційних кодів. - Alex Dupuy
Це було дійсно корисним для мене більше одного разу, спасибі за те, що так ретельно! - Alice Purcell


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

git name-rev --name-only HEAD

118
2017-11-02 19:17



це також можна отримати з echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/} - Antoine
Це не спрацьовує, якщо HEAD має однакову гілку (наприклад, під час злиття). Він повертає "майстра", навіть якщо він виконується в гілці функцій. - Orest Hera
git checkout master && git name-rev --name-only HEAD # ac-187 Це не працює, як очікувалося - Alexander Abashkin
Я зберігаю це в змінній безпосередньо перед злиттям, а також у випадках, коли моя HEAD може бути припинено, якщо я перевірив певну фікцію. У цьому випадку це добре працює. - Ishaan Sejwal
Я роблю це з трубопроводу Дженкінс. Отже, це, мабуть, на даний момент є найкращою відповіддю для мене. Робити git branch --list просто каже * (HEAD detached at 7127db5). Робити git rev-parse --abbrev-ref HEAD просто каже HEAD і так далі. - Mig82


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

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

(кредит: Обмежене Спокутування)

І поки я там, один вкладиш для отримання віддаленого відстеження гілки (якщо є)

git rev-parse --symbolic-full-name --abbrev-ref @{u}

87
2018-04-04 15:20



Забагато косу риси! :) sed -n 's/\* //p' робить трюк. Хоча я схиляюся до параноїка, тому я б прив'язав його до sed -n 's/^\* //p'. - Mark Reed


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

$ git status

і ви побачите текст, серед якого щось подібне:

...
On branch master
...

що означає, що ви зараз перебуваєте master філія Якщо ви редагуєте будь-який файл на той момент, і він знаходиться в одному локальному сховищі (локальний каталог, що містить файли, що знаходяться під управлінням Git version control), ви редагуєте файл у цій гілці.


49
2018-06-05 20:31



На основі того, що ви хочете зробити, ви можете використовувати git status і отримати тільки першу лінію виведення з git status | head -1 що дає щось подібне # On branch master. Я впевнений, що відмінності версії також повинні бути враховані. - Joshua Pinter
@JoshPinter: Ви також можете використовувати git status | grep 'On branch', який повинен мати той самий ефект (якщо це не означає, що це буде, якщо ваша версія Git відображатиме її по-різному). Or git branch | grep '*', де на початку назви буде показано назву гілки з зіркою. - Tadeck
Так, це також працює і може бути більш гнучким. Мій остаточний результат для показу лише назви гілки в додатку Rails був: <tick>git status | head -1<tick>.gsub('# On branch ', '') - Joshua Pinter
git status може зайняти багато часу, щоб повернути значення, якщо багато файлів керуються. - the Tin Man


git symbolic-ref -q --short HEAD

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


26
2017-10-02 22:09



Спасибі, чудово працює! - Я також додав "-C path_to_folder" у своєму сценарії з цим. - Tony


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

покаже лише назву галузі


24
2018-06-14 13:08



Якщо ваша філія показує, що таке "* (HEAD відокремлено при SUM_BRANCH_01)", спробуйте це "гіт гілки | grep-e" ^ * "| cut -d" -f 5 | cut-d ')' -f 1 " - Dylan Kapp
Я просто створив цей самий скрипт, щоб отримати назву поточної назви. Я вирішив, що це може допомогти з розбіжностями. - tggagne