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:
LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`
No meu caso, como só estou interessado em descobrir o nome do meu controle remoto atual, faço o seguinte:
git config branch.`git name-rev --name-only HEAD`.remote
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.