Mostrar apenas a ramificação atual no Git

356

Tentei procurar um comando Git especial para isso, mas não consegui encontrar um. Existe algo mais curto ou mais rápido que o seguinte?

git branch | awk '/\*/ { print $2; }'
Ollie Saunders
fonte
11
eu acho que este é o fastes possível maneira de obter ramificação atual
Eimantas
2
possível duplicata de Como obter o nome do ramo atual no Git?
Chandrayya GK
@ChandrayyaGK: Não, porque a outra pergunta é sobre fazer isso de dentro do seu IDE. (Muitas das respostas são para uso da linha de comando, vale a pena dar uma olhada, mas não é uma duplicata adequada, e talvez essas respostas devam ser migradas aqui, se houver alguma que agregue valor significativo ao que já está aqui.)
Tripleee
3
@Torek - aqui está outra tarefa simples dificultada pelo Git.
JWW
A resposta principal para o link @ChandrayyaGK postado é muito mais lenta que isso!
Colm Bhandal 01/10/19

Respostas:

660
$ git rev-parse --abbrev-ref HEAD
master

Isso deve funcionar com o Git 1.6.3 ou mais recente.

conde
fonte
Também não funciona para mim, com o git-1.6.2.5. git rev-parse CABEÇA --abbrev-ref => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (ie rev-parse não aceita --abbrev-ref (não na página man quer))
JasonWoof
11
JasonWoof, funciona para mim no 1.6.4.2, necessidade de changelog para ver exatamente quando isso aconteceu ;-)
Michael Krelin - hacker de
7
Pelo que sei pelos logs do Git, esse recurso foi mesclado em 20/04/2009 e foi lançado com a versão 1.6.3.
conde
11
Eu realmente gostaria de entender isso também. Como isso realmente funciona? Além disso, parece que --abbrev-ref não retorna nada para nenhum outro argumento. Não pode ter HEAD como argumento.
Setafire 25/01
6
Observe que, se você estiver em uma referência simbólica desanexada (pode significar que você está em uma ramificação, mas fez check-out anterior), esse comando retornará apenas HEAD, não é esperadomaster
unifreak
129

No Git 1.8.1, você pode usar o comando git symbolic-ref com a opção "--short":

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
dieresys
fonte
Obrigado. Alias ​​criado.
Michael Burr
7
Melhor do que a resposta aceita IMO, porque ele funciona em repos sem commits
Jerome Dalbert
2
Recebendo o erro fatal: ref HEAD is not a symbolic refao executar este como parte de uma compilação TravisCI
kmanzana
Não parecia funcionar no GIT 1.9.1 `` `` git versão 1.9.1 fatal: ref HEAD não é um ref simbólico `` ``
Richard
Funciona para mim: git versão 2.16.2.windows.1
Tagc
59

Com Git 2,22 (Q2 2019), você terá uma abordagem mais simples: git branch --show-current.

Veja commit 0ecb1fc (25 de outubro de 2018) por Daniels Umanovskis ( umanovskis) .
(Mesclado por Junio ​​C Hamano - gitster- in commit 3710f60 , 07 mar 2019)

branch: introduzir --show-currentopção de exibição

Quando chamado com --show-current, git branchimprimirá o nome da filial atual e será encerrado.
Somente o nome real é impresso, sem refs/heads.
No estado HEAD desanexado, nada é produzido.

Destinado a scripts e uso interativo / informativo.
Ao contrário git branch --list, nenhuma filtragem é necessária apenas para obter o nome da ramificação.

VonC
fonte
15
Finalmente, o que parece que deveria estar lá desde o início, foi adicionado!
dtasev 22/03/19
27

Você pode estar interessado na saída de

git symbolic-ref HEAD

Em particular, dependendo das suas necessidades e layout, você pode querer fazer

basename $(git symbolic-ref HEAD)

ou

git symbolic-ref HEAD | cut -d/ -f3-

e, novamente, há o .git/HEADarquivo que também pode ser do seu interesse.

Michael Krelin - hacker
fonte
2
Você pode reduzir git rev-parse --symbolic-full-namepara git symbolic-ref.
13131 Earl
11
Você não precisa usar basenameou cut; use BR=${BR#refs/heads/}(onde BR é o nome da variável da qual você salvou a saída git symbolic-ref HEAD).
21749 Jakub Narębski
Jakub, é claro que não, desde que você tenha a saída em variável.
Michael Krelin - hacker 13/09/09
5
git symbolic-ref --short HEADtambém pode fazer
Fahad Siddiqui
2
Isso será interrompido se você tiver barras nos nomes de suas ramificações ("task / foo", "feature / bar"). Um grupo de meus buildscripts começou a falhar quando colegas decidiram que os cortes foram cool ...
Vacri
13

Pelo que sei, não há como mostrar nativamente apenas a ramificação atual no Git, então eu tenho usado:

git branch | grep '*'
theruss
fonte
3
Enquanto isso funciona com o GNU coreutils, grep '*'é nominalmente um erro de sintaxe. Você provavelmente quer git branch | sed -n 's/^\* //p'mesmo assim. Ou, na verdade, o que o OP postou em primeiro lugar, o que equivale à mesma coisa.
Tripleee 07/10
@tripleee você pode me esclarecer sobre por que grep '*'nominalmente é um erro de sintaxe?
JK ABC
11
@JKABC: o que @tripleee quis dizer é que '*'é uma expressão regular e, como tal, é inválida. Você provavelmente deseja usar '[*]'(ou seja, caractere em *vez de operador "zero ou mais vezes").
Johndodo 16/03
2
@johndodo obrigado pelo esclarecimento, isso faz sentido para mim agora. Eu costumo fazê-lo porgrep '\*'
JK ABC
2
só pode cortar o nome da filial comgit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui 15/05
7

Eu acho que isso deve ser rápido e pode ser usado com uma API Python:

git branch --contains HEAD
* master
urvish
fonte
4
Isso não gera a ramificação atual. Ele exibe a lista de ramificações que apontam para os pontos de confirmação do HEAD. E sim, pode se sobrepor, mas isso pode levar a mal-entendidos. Crie uma nova ramificação de onde você está e tente novamente sua linha: duas ramificações. A pergunta pede " apenas o ramo atual ".
RomainValeri 10/03/19
4

estou a usar

/etc/bash_completion.d/git

Ele veio com o Git e fornece um prompt com o nome da ramificação e a conclusão do argumento.

iny
fonte
Como esse prompt pode ser ativado?
8114 Alex
No ubuntu, o $ source /etc//bash_completion.d/git-prompt arquivo pode ter um nome diferente em diferentes sistemas. (Nota: sourcepalavra-chave é o mesmo que apenas .(dot) em bash.)
michael
1

Isso não é mais curto, mas também lida com ramificações desanexadas:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
arn0n
fonte
1

Para echo $(__git_ps1)garantir a integridade, pelo menos no Linux, você deve fornecer o nome da ramificação atual entre parênteses.

Isso pode ser útil em alguns cenários, pois não é um comando Git (enquanto depende do Git), principalmente para configurar o prompt de comando do Bash para exibir a ramificação atual .

Por exemplo:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>
timtim
fonte
o item é um alias e deve estar presente para scripts de shell interativos. provavelmente está ausente para qualquer tipo de script.
Alexander Stohr
0

Alguém pode achar isso ( ) útil. O ramo atual é mostrado com uma marca *.git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
Kaliyug Antagonist
fonte