Consulte também:
Como posso ver quais ramificações do Git estão rastreando qual ramificação remota / upstream?
Como posso descobrir qual filial remota uma filial local está rastreando?
Preciso analisar a git config
saída ou existe um comando que faria isso por mim?
git
branch
git-remote
Somente leitura
fonte
fonte
git remote show origin
. A resposta principal na outra pergunta é um script bash em torno da resposta simples aqui, que pode ser útil para alguns. Esperamos que esta questão não seja completamente fechada.Respostas:
Aqui está um comando que fornece todas as ramificações de rastreamento (configuradas para 'pull'), consulte:
Você precisa percorrer o SHA e todas as mensagens de confirmação de quebra longa, mas é rápido digitar e alinhar os ramos de rastreamento verticalmente na terceira coluna.
Se você precisar de informações sobre as configurações 'pull' e 'push' por filial, consulte a outra resposta
git remote show origin
.Atualizar
A partir da versão 1.8.5 do git, é possível mostrar o ramo upstream com
git status
egit status -sb
fonte
git branch -av
ougit remote show origin
, o que dará uma grande quantidade de dados, não apenas o acompanhou à distânciagit status
egit status -sb
- então, quando você atualiza para o 1.8.5.x, esta pergunta (e resposta) é irrelevante.Duas escolhas:
ou
fonte
%(refname:short)
é o nome da referência atual dentro--format
.git help revisions
(uma das partes pouco conhecidas, mas mais úteis dos documentos) e procureupstream
.git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
substituir SOMEBRANCH com o nome de ramo, ou "cabeça" para o ramo atualEu acho que
git branch -av
apenas informa em quais ramificações você tem e em quais confirmações elas estão, deixando-o deduzir em quais ramificações remotas as ramificações locais estão rastreando.git remote show origin
informa explicitamente quais filiais estão rastreando quais filiais remotas. Aqui está um exemplo de saída de um repositório com uma única confirmação e uma ramificação remota chamadaabranch
:versus
fonte
git remote show origin
mostra as ramificações locais e o que elas rastreiam para empurrar e puxar.origin
, embora possa realmente ser qualquer coisa (por exemplo, vários controles remotos, com diferentes ramos rastreando ramos de diferentes controles remotos).Atualização: Bem, já faz vários anos desde que eu publiquei isso! Para o meu objetivo específico de comparar o HEAD com o upstream, agora uso
@{u}
, que é um atalho que se refere ao HEAD do ramo de rastreamento upstream. (Consulte https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).Resposta original: Também deparei com esse problema. Costumo usar vários controles remotos em um único repositório, e é fácil esquecer em qual deles sua filial atual está rastreando. E, às vezes, é útil saber disso, como quando você deseja ver os commits locais via
git log remotename/branchname..HEAD
.Todo esse material é armazenado nas variáveis de configuração do git, mas você não precisa analisar a saída do git config. Se você chamar o git config seguido pelo nome de uma variável, ele imprimirá apenas o valor dessa variável, sem necessidade de análise. Com isso em mente, aqui estão alguns comandos para obter informações sobre a configuração de rastreamento de sua filial atual:
No meu caso, como só estou interessado em descobrir o nome do meu controle remoto atual, faço o seguinte:
fonte
git name-rev --name-only HEAD
não dirá em que ramo você está. Por que eu simplesmente usadogit branch | grep '^\*' | cut -d' ' -f2
@{u}
pseudônimo / atalho e é exatamente isso que eu estava procurando! Não há razão para comparar com a ramificação principal se você quiser determinar se precisa puxar ou não.@{u}
é a bomba. E existe desde a 1.7.0, o que significa que, se não estiver disponível em um git que alguém esteja usando em 2018, provavelmente haverá uma atualização.Os ramos locais e seus controles remotos.
Todos os ramos e controles remotos de rastreamento.
Veja onde as ramificações locais estão explicitamente configuradas para push and pull.
fonte
Isso mostrará a filial em que você está:
Isso mostrará apenas o ramo atual em que você está:
por exemplo:
Você pode descobrir o URL do controle remoto usado pela filial atual com a qual você está:
por exemplo:
fonte
Você pode usar
git checkout
, ou seja, "confira o ramo atual". Este é um no-op com efeitos colaterais para mostrar as informações de rastreamento, se existir, do ramo atual.fonte
Não sei se isso conta como analisar a saída do git config, mas isso determinará a URL do controle remoto que o mestre está rastreando:
fonte
git config branch.$(git symbolic-ref -q HEAD).remote
se você quiser apenas o nome do controle remoto sendo rastreado da ramificação atual -git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
para o URL.--short
opção para que funcionasse. Portanto, para obter o nome remoto do ramo atual:git config branch.$(git symbolic-ref -q --short HEAD).remote
e para obter o URL do controle remoto do ramo atual:git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
Ainda outra maneira
Isso lhe dará
fonte
Outra maneira simples é usar
cat .git/config
em um repositório gitIsso listará detalhes das filiais locais
fonte
type .git/config
em vez decat .git/config
, claro, na linha de comando simples ..Outro método (obrigado osse), se você quer apenas saber se existe ou não:
fonte
git branch -vv | grep 'BRANCH_NAME'
git branch -vv
: Esta parte mostrará todas as ramificações locais junto com sua ramificação upstream.grep 'BRANCH_NAME'
: Filtrará a ramificação atual da lista de ramificações.fonte
listará todas as ramificações, incluindo a remota.
fonte
Lista ramificações locais e remotas:
Resultado:
fonte
A saída v2 de porcelana com status git (legível por máquina) fica assim:
E para obter o ramo apenas a montante:
Se a ramificação não tiver upstream, o comando acima produzirá uma saída vazia (ou falhará com
set -o pipefail
).fonte
Se você deseja encontrar o upstream para qualquer ramificação (ao contrário da que você está), aqui está uma pequena modificação na resposta do @ cdunn2001:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
Isso fornecerá o nome da ramificação remota para a ramificação local denominada
YOUR_LOCAL_BRANCH_NAME
.fonte
Você pode tentar isso:
branch_name
precisa ser substituído por sua filialfonte
git remote show origin
- se for chamadomerges
ouconfigure
?Eu uso esse apelido
então
observe que o script também pode ser usado para configurar o rastreamento.
Mais ótimos aliases em https://github.com/orefalo/bash-profiles
fonte
Eu uso o EasyGit (aka "eg") como um invólucro super leve em cima (ou ao lado) do Git. O EasyGit possui um subcomando "info" que fornece todos os tipos de informações super úteis, incluindo o ramo de rastreamento remoto das agências atuais. Aqui está um exemplo (onde o nome do ramo atual é "foo"):
fonte
Melhorando esta resposta ,
.gitconfig
criei esses aliases:fonte
Se você estiver usando Gradle,
fonte
O comando a seguir irá se referir à bifurcação atual de origem remota
Para adicionar um caminho remoto,
fonte