Pergunta

Como é que isso realmente aconteceu?

Eu estou trabalhando em um repo por mim, no momento, de modo que este é o meu fluxo de trabalho:

  1. alterar arquivos
  2. Commit
  3. Repita 1-2 até satisfeito
  4. Push to mestre

Então, quando eu faço um git status ele me diz que meu ramo é frente por X commits (presumivelmente o mesmo número de commits que eu fiz). Será que é porque quando você empurra o código que na verdade não atualizar seus arquivos em cache local (nas pastas .git)? git pull parece 'consertar' esta mensagem estranha, mas eu ainda estou curioso por que isso acontece, talvez eu estou usando git errado?


incluindo o ramo é impresso na mensagem

O meu ramo local está à frente do mestre

onde você empurrar / puxar o ramo atual

Eu estou empurrando para GitHub e puxando a qualquer computador acontecer de eu estar trabalhando em naquele momento, minha cópia local é sempre totalmente atualizado como eu sou o único a trabalhar nele.

não realmente verificar o repo remoto

Isso é o que eu pensei, eu percebi que eu teria certeza o meu entendimento de que era correto.

Você está passando alguns argumentos extras para ele?

Nem aqueles que eu posso ver, talvez haja alguma configuração engraçado acontecendo no meu fim?

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Foi útil?

Solução

Se você receber esta mensagem depois de fazer um git pull remote branch, tente seguir-se com uma git fetch. (Opcionalmente, git fetch -p correr para podar eliminado ramos do repo)

Obter parece atualizar a representação local da filial remota, o que não acontece necessariamente quando você faz uma git pull remote branch.

Outras dicas

Use

git pull --rebase

Os meios de opção --rebase que git irá mover o seu local de cometer lado, sincronizar com o controle remoto e, em seguida, tentar aplicar seus commits do novo estado.

Use estes 3 simples comandos

Passo 1 : git checkout <branch_name>

Passo 2 : git pull -s recursive -X theirs

Passo 3 : git reset --hard origin/<branch_name>

Mais detalhes: https://stackoverflow.com/a/39698570/2439715

Aproveite.

Eu acho que você está interpretando mal a mensagem - o seu ramo não está à frente de master, ele é master. É antes de origin/master, que é um monitoramento remoto ramo que registra o estado do repositório remoto de seu último push, pull, ou fetch. É dizer-lhe exatamente o que você fez; você tem à frente da remota e está lembrando-o de empurrar.

Alguém disse que você pode ser interpretando mal a sua mensagem, você não é. Esse problema, na verdade, tem a ver com o seu arquivo <project>/.git/config. Nele será uma seção semelhante a esta:

[remote "origin"]
    url = <url>
    fetch = +refs/heads/*:refs/remotes/origin/*

Se você remover a linha de buscar do seu projeto é .git / config arquivo que você vai parar o "seu ramo está à frente de 'origin / master' por commits N." aborrecimento ocorra.

Ou assim eu espero. :)

Eu tive esse problema no meu servidor estágio onde eu faço apenas puxa. E hard reset me ajudou a CABEÇA limpa para o mesmo que remota.

git reset --hard origin/master

Então agora eu tenho novamente:

On branch master
Your branch is up-to-date with 'origin/master'.

No meu caso era porque eu mudei para mestre usando

 git checkout -B master

Apenas para puxar a nova versão dele em vez de

 git checkout master

O primeiro comando redefine a cabeça do mestre para meus últimos commits

Eu costumava

git reset --hard origin/master

Para corrigir esse

Eu passei por todas as soluções desta página, e felizmente @ anatolii-pazhyn comentou porque a sua solução foi a que trabalhou. Infelizmente eu não tenho o suficiente reputação para upvote-lo, mas eu recomendo tentar a sua primeira solução:

git reset --hard origin/master

O que me deu:

HEAD is now at 900000b Comment from my last git commit here

Eu também recomendo:

git rev-list origin..HEAD
# to see if the local repository is ahead, push needed

git rev-list HEAD..origin
# to see if the local repository is behind, pull needed

Você também pode usar:

git rev-list --count --left-right origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged

Boa sorte

Eu tive esse mesmo problema em uma máquina Windows. Quando eu corri um comando git pull origin master, gostaria de obter o "à frente de 'origin / master' por X comete" aviso. Descobri que se eu em vez correu git pull origin e não especificou o ramo, então eu deixaria de receber o aviso.

Ela só faz lembrar as diferenças entre o ramo atual e o ramo que faz a faixa atual. Por favor, forneça mais informações, incluindo o ramo é impresso na mensagem e onde você empurrar / puxar o ramo atual.

Embora esta pergunta é um pouco velho ... Eu estava em uma situação semelhante e minha resposta aqui me ajudou a corrigir um problema semelhante que eu tinha

Primeira tentativa com push -f ou opção de força

Se isso não funcionar, é possível que (como no meu caso) os repositórios remotos (ou melhor, as referências aos repositórios remotos que aparecem na git remote -v) pode não estar sendo atualizado.

Resultado acima seja o seu impulso sincronizado seu / filial local com seu controle remoto / filial no entanto, o cache em sua repo local ainda mostra cometer anterior (de / filial local ... fornecidos somente única confirmação foi empurrado) como chefe.

Para confirmar o clone acima do repo em um local diferente e tentar comparar CABEÇA / filial local e remota / HEAD ramo. Se ambos são iguais então provavelmente você está enfrentando o problema que eu fiz.

Solução:

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/pjhyett/hw.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)
$ git remote rm origin
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)

Agora faça um push -f como segue

git push -f github master ### Observe o seu comando não tem origin mais!

Faça um git pull agora git pull github master

em git status receber

# On branch master

nothing to commit (working directory clean)

Espero que isso útil para alguém como o número de pontos de vista é tão alta que a procura por este erro quase sempre lista esta discussão no topo

Além disso, consulte gitref para mais detalhes

Na verdade, eu tinha isso acontecer quando eu estava fazendo um interruptor / check-out com TortiseGIT.

Meu problema era que eu tinha criado o ramo baseado em outro ramo local. É criada uma entrada de "fusão" em /.git/config que parecia algo como isto:

[branch "web"]
    merge = refs/heads/develop
    remote = gitserver

Onde sempre que eu mudei para o ramo "web", ele estava me dizendo que eu era 100+ commits antes de se desenvolver. Bem, eu já não comprometendo-se a desenvolver de modo que era verdade era. Eu era capaz de remover simplesmente esta entrada e parece estar funcionando como esperado. Ele está devidamente rastreamento com o árbitro remoto em vez de reclamar sobre estar por trás do ramo desenvolver.

Como Vikram disse, esta discussão Stack Overflow é o primeiro resultado no Google quando procurar este problema, então eu pensei que iria partilhar a minha situação e solução.

Então, quando eu faço um status git ele me diz que meu ramo está à frente por commits X (presumivelmente o mesmo número de commits que fiz ).

A minha experiência é em um ambiente de equipe com muitos ramos. Nós trabalhamos em nossos próprios ramos de novos recursos (em clones locais) e foi um dos que git status mostrou que eu tinha 11 commits à frente. Minha hipótese de trabalho, como o autor da pergunta, era que 11 era de commits de minha própria .

Acontece que eu tinha puxado em mudanças do ramo develop comum em meu ramo de recurso muitas semanas mais cedo - mas esqueceu! Quando eu revisitada o meu ramo de recurso local, hoje e fez um git pull origin develop o número saltou para +41 commits frente. Muito trabalho foi feito em develop e por isso o meu ramo de recurso local, foi ainda mais à frente do ramo de recurso no repositório origin.

Então, se você receber esta mensagem, pense em nenhum puxa / fusões você poderia ter feito de outros ramos (de sua preferência, ou outros) a que tem acesso. A mensagem apenas sinaliza que você precisa para git push essas mudanças pulled voltar para o repo origin ( 'tracking branch') do seu repo local para fazer as coisas sincronizado para cima.

As respostas que sugerem git pull ou git fetch estão corretas.
A mensagem é gerado quando git status vê uma diferença entre .git/FETCH_HEAD e .git/refs/remotes/<repository>/<branch> (por exemplo .git/refs/remotes/origin/master).

Os últimos registros do arquivo a cabeça do último fetch (para o repositório / branch). Fazendo git fetch atualiza ambos os arquivos para CABEÇA atual do ramo.
Claro, se não há nada para buscar (porque o repositório local já está up-to-date), então .git/FETCH_HEAD não muda.

Eu gostaria de reiterar o mesmo como mencionado por @Marian Zburlia acima. Ela trabalhou para mim e gostaria de sugerir o mesmo para os outros.

git pull origin develop

deve ser seguido por $ git pull --rebase.

Isto irá remover os comentários chegando na $ git status após a última puxada.

git fetch vai resolver isso para você

Se o meu entendimento é correto, o local (cache) origin/master está desatualizado. Este comando irá atualizar o estado repositório do servidor.

Isso funcionou para mim

git reset --hard origin/master

A saída deve parecer

On branch dev HEAD is now at ae1xc41z Last commit message

Se você receber esta mensagem depois de fazer um commit, a fim de arquivo untrack no ramo, tente fazer alguma mudança em qualquer arquivo e executar cometer. Aparentemente você não pode fazer única confirmação que inclui apenas cancelando o monitoramento de arquivo previamente rastreado. Finalmente este post me ajudou a resolver o problema de todo https: / /help.github.com/articles/removing-files-from-a-repository-s-history/. Eu só tinha que remover o arquivo do histórico do repositório.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top