Eu sou do background do Subversion e, quando tinha uma ramificação, sabia no que estava trabalhando com "Esses arquivos de trabalho apontam para essa ramificação".
Mas, com o Git, não tenho certeza quando estou editando um arquivo no NetBeans ou no Notepad ++, esteja ele vinculado ao mestre ou a outro ramo.
Não há problema com o git
bash, isso me diz o que estou fazendo.
git
branch
git-branch
mike628
fonte
fonte
.git/HEAD
, possivelmente em um diretório paigit branch --show-current
. Veja minha resposta aqui .Respostas:
deve mostrar todas as ramificações locais do seu repo. O ramo com estrela é o seu ramo atual.
Se você deseja recuperar apenas o nome da filial em que está, pode:
fonte
git checkout --orphan foo
entãogit branch
não conseguiu mostrar o ramofoo
. Considerando que,git symbolic-ref HEAD
como sugerido, outra resposta funcionou.Para exibir o ramo atual em que você está, sem os outros ramos listados, você pode fazer o seguinte:
Referência:
fonte
git branch
mostra* (no branch)
, que também é inútil ...git rev-parse --abbrev-ref HEAD 2>/dev/null
A parte / dev / null impede que você veja um erro se você acabou de criar um novo repositório que ainda não possui HEAD.Você também tem o
git symbolic-ref HEAD
que exibe o refspec completo.Para mostrar apenas o nome do ramo no Git v1.8 e posterior (obrigado a Greg por apontar isso):
No Git v1.7 +, você também pode:
Ambos devem dar o mesmo nome de filial, se você estiver em uma filial. Se você estiver com uma cabeça desapegada, as respostas serão diferentes.
fonte
git rev-parse --abbrev-ref HEAD
mostraHEAD
quando você está desanexado.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
uma vez que exibirá uma string comoHEAD detached at a63917f
em um estado desanexado, diferente das outras respostas que mostram nada ou HEAD. Isso é importante.Para minha própria referência (mas pode ser útil para outras pessoas), fiz uma visão geral da maioria das técnicas (linha de comando básica) mencionadas neste encadeamento, cada uma aplicada a vários casos de uso: HEAD is (apontando para):
Resultados:
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
(nota: nãoremotes/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
(FYI, isso foi feito com a versão 1.8.3.1 do git)
fonte
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
era a melhor solução para mim (bons nomes para marcas e chefes de filiais, nenhuma saída para as cabeças separadas aleatórios.git describe
tem uma falha grave quando há vários ramos que referenciam o mesmo commit, por exemplo, logo apósgit checkout -b foo
- ele usa um deles arbitrariamente (parece ser o mais recentemente criado). Vou mudar minha estratégia para usar saída filtradagit branch
e usar somentegit describe
se o resultado for algo sobre uma cabeça desanexada.git branch --no-color
para garantir que o nome do arquivo esteja livre de códigos de escape de terminal irritantes.A partir da versão 2.22 do git, você poderia apenas usar:
Conforme a página de manual:
fonte
Mais uma alternativa:
fonte
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Ele não funciona como esperado #git branch --list
apenas diz* (HEAD detached at 7127db5)
. Fazendogit rev-parse --abbrev-ref HEAD
apenas dizHEAD
e assim por diante.Bem simples, eu comprei em um forro (bash)
(crédito: Expiação Limitada)
E enquanto estou lá, o único liner para obter o ramo de rastreamento remoto (se houver)
fonte
sed -n 's/\* //p'
faz o truque. Embora eu tenha tendência para o paranóico, eu o ancorariased -n 's/^\* //p'
.Você pode digitar apenas a linha de comando (console) no Linux, no diretório do repositório:
e você verá algum texto, entre os quais algo semelhante a:
o que significa que você está atualmente no
master
ramo. Se você estiver editando algum arquivo naquele momento e ele estiver localizado no mesmo repositório local (diretório local que contém os arquivos que estão sob o gerenciamento de controle de versão do Git), você estará editando o arquivo nesta ramificação.fonte
git status
e obter apenas a primeira linha de saída com agit status | head -1
qual produz algo parecido# On branch master
. Tenho certeza de que as diferenças de versão também precisam ser contabilizadas.git status | grep 'On branch'
, o que deve ter o mesmo efeito (deveria, não significa que ocorrerá se a sua versão do Git a exibir de maneira diferente). Ougit branch | grep '*'
, que mostrará o nome do ramo com uma estrela no início.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
pode levar muito tempo para retornar um valor se houver muitos arquivos sendo gerenciados.git status
pode armazenar o tempo de geração da página inteira.Eu uso isso em scripts que precisam do nome da filial atual. Ele mostrará a referência simbólica abreviada atual para HEAD, que será seu nome de filial atual.
fonte
mostrará apenas o nome do ramo
fonte
git branch
mostrar apenas o nome da filial atual.Embora o ramo git mostre todos os ramos e destaque o atual com um asterisco, ele pode ser muito complicado quando se trabalha com muitos ramos.
Para mostrar apenas a filial em que você está atualmente, use:
fonte
git branch --contains
vezes, o @DylanNicholson lista mais de um ramo.Encontrei uma solução de linha de comando do mesmo tamanho que a de Oliver Refalo , usando o bom e velho awk:
awk
lê isso como "faça as coisas nas{}
linhas correspondentes ao regex". Por padrão, ele assume campos delimitados por espaços em branco, para que você imprima o segundo. Se você puder assumir que apenas a linha com sua ramificação possui o *, você pode soltar o ^. Ah, bash golfe!fonte
fonte
Por que não usar o prompt de shell compatível com git, que informa o nome da ramificação atual?
git status
também ajuda.Como git-prompt.sh de
contrib/
faz isso (git versão 2.3.0), conforme definido na__git_ps1
função auxiliar:Primeiro, há um caso especial se a rebase em andamento for detectada. O Git usa ramificação sem nome (HEAD desanexado) durante o processo de rebase para torná-lo atômico, e a ramificação original é salva em outro lugar.
Se o
.git/HEAD
arquivo é um link simbólico (um caso muito raro, da história antiga do Git), ele usagit symbolic-ref HEAD 2>/dev/null
Senão, lê o
.git/HEAD
arquivo. Os próximos passos dependem do seu conteúdo:Se esse arquivo não existir, não haverá ramificação atual. Isso geralmente acontece se o repositório estiver vazio.
Se ele começa com o
'ref: '
prefixo, então.git/HEAD
é symref (referência simbólica) e estamos no ramo normal. Retire esse prefixo para obter o nome completo e retire orefs/heads/
nome abreviado da ramificação atual:Se não começar
'ref: '
, será desanexado HEAD (ramificação anônima), apontando diretamente para algum commit. Usegit describe ...
para escrever a confirmação atual em formato legível por humanos.Espero que ajude.
fonte
git describe --contains --all HEAD
que atualmente não vejo em nenhum outro lugar nesta página. Como eu tenho certeza que você sabe, respostas somente para links não são recomendadas no StackOverflow.git-prompt.sh
(aka__git_ps1
) faz isso ...Uma versão menos barulhenta para o status git faria o truque
Imprime
fonte
Desculpe, esta é outra resposta da linha de comando, mas era isso que eu estava procurando quando encontrei esta pergunta e muitas dessas respostas foram úteis. Minha solução é a seguinte função de shell bash:
Isso sempre deve me dar algo legível por humanos e diretamente utilizável como argumento
git checkout
.feature/HS-0001
v3.29.5
fonte
git checkout
.você pode usar git bash no comando diretório de trabalho é o seguinte
dirá em que ramo você está, existem muitos comandos úteis, alguns deles são
--short Fornece a saída no formato curto.
-b --branch Mostra as informações da filial e do rastreamento, mesmo em formato curto.
--porcelain [=] Forneça a saída em um formato fácil de analisar para scripts. Isso é semelhante à saída curta, mas permanecerá estável nas versões do Git e independentemente da configuração do usuário. Veja abaixo os detalhes.
O parâmetro version é usado para especificar a versão do formato. Isso é opcional e o padrão é o formato da versão original v1.
--long Fornece a saída no formato longo. Esse é o padrão.
-v --verbose Além dos nomes dos arquivos que foram alterados, também mostre as alterações textuais que são preparadas para serem confirmadas (ou seja, como a saída do git diff --cached). Se -v for especificado duas vezes, também mostre as mudanças na árvore de trabalho que ainda não foram preparadas (por exemplo, como a saída do git diff).
fonte
também fornecerá o nome do ramo junto com as alterações.
por exemplo
fonte
Com o tempo, podemos ter uma lista realmente longa de filiais.
Enquanto algumas das outras soluções são ótimas, eis o que eu faço (simplificado da resposta de Jacob):
Agora,
funciona, mas apenas se houver alguma alteração local
fonte
Eu recomendo usar qualquer um desses dois comandos.
git branch | grep -e "^*" | cut -d' ' -f 2
OU
git status | sed -n 1p | cut -d' ' -f 3
OU (mais detalhado)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
fonte
No Netbeans, verifique se as anotações de versão estão ativadas (Exibir -> Mostrar etiquetas de versão). Você pode ver o nome da filial ao lado do nome do projeto.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
fonte
Que tal isso?
fonte
symbolic-ref
parte também não precisa--short
evitar o prefixo do nome da filialrefs/heads/
?Eu tenho um script simples chamado
git-cbr
( ramo atual ) que imprime o nome do ramo atual.Eu coloquei esse script em uma pasta personalizada (
~/.bin
). A pasta está em$PATH
.Então agora, quando estou em um repositório git, simplesmente digito
git cbr
para imprimir o nome do ramo atual.Isso funciona porque o
git
comando pega seu primeiro argumento e tenta executar um script que seja chamado pelo nome degit-arg1
. Por exemplo,git branch
tenta executar um script chamadogit-branch
etc.fonte
Você pode configurar permanentemente sua saída do bash para mostrar o nome do seu git-branch. É muito útil quando você trabalha com ramificações diferentes, sem precisar digitar
$ git status
o tempo todo. Repo do Github git-awareness-prompt .Abra seu terminal (ctrl-alt-t) e digite os comandos
Edite seu .bashrc com o
sudo nano ~/.bashrc
comando (para Ubuntu) e adicione o seguinte ao topo:Depois cole o código
no final do mesmo arquivo em que você colou o código de instalação anteriormente. Isso fornecerá a saída colorida:
fonte
O seguinte comando shell informa a filial em que você está atualmente.
Quando você não quiser digitar esse comando longo toda vez que quiser conhecer a ramificação e usar o Bash, forneça um pequeno alias ao comando, por exemplo
cb
, alias , assim.Quando você está no mestre da filial e seu prompt é
$
, você obtém* master
o seguinte.fonte
git branch | grep '^\*'
Retorna o nome da ramificação ou SHA1 quando na cabeça desanexada:
Esta é uma versão curta da resposta de @ dmaestro12 e sem suporte a tags.
fonte
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Se você realmente deseja fazer o check-out da última ramificação / etiqueta no estado HEAD desanexado.
Atualizar Isso é melhor se você tiver e não tiver medo do awk.
fonte
rev | cut -d' ' -f1| rev
pode ser simplificado comawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
que ainda é um truque útil que pode ajudar a desambiguar alguns casos.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Eu sei que é tarde, mas em um linux / mac, a partir do terminal, você pode usar o seguinte.
Explicação:
git status -> obtém o status da árvore de trabalho
sed -n 1p -> obtém a primeira linha do corpo do status
A resposta ao comando acima terá a seguinte aparência:
fonte
head -1
da maneira usualvocê também pode usar a variável GIT_BRANCH como aparece aqui: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
O plugin git define várias variáveis de ambiente que você pode usar em seus scripts:
GIT_COMMIT - SHA do atual
GIT_BRANCH - Nome do ramo atualmente em uso, por exemplo, "master" ou "origin / foo"
GIT_PREVIOUS_COMMIT - SHA do commit construído anteriormente da mesma ramificação (o SHA atual na primeira compilação na ramificação)
GIT_URL - URL remoto do repositório
GIT_URL_N - URLs remotos do repositório quando houver mais de 1 controles remotos, por exemplo, GIT_URL_1, GIT_URL_2
GIT_AUTHOR_EMAIL - Email do autor / autor
GIT_COMMITTER_EMAIL - Email do autor / autor
fonte
Adicione-o ao
PS1
Mac:Antes de executar o comando acima:
Depois de executar esse comando:
Não se preocupe, se não for um repositório GIT, ele não exibirá erros, pois
[-d .git]
verifica se a.git
pasta existe ou não.fonte