git: Sua ramificação está à frente de X commits

Como isso realmente acontece?

Eu estou trabalhando em um repository por mim mesmo no momento, então este é o meu stream de trabalho:

  1. Alterar arquivos
  2. Commit
  3. Repetir 1-2 até satisfeito
  4. Empurrar para master

Então, quando eu faço um git status ele me diz que minha ramificação está à frente com X commits (presumivelmente o mesmo número de commits que eu fiz). É porque quando você pressiona o código, ele não atualiza seus arquivos localmente em cache (nas pastas .git)? git pull parece “consertar” essa estranha mensagem, mas ainda estou curioso para saber por que isso acontece, talvez eu esteja usando o git errado?


incluindo qual ramificação é impressa na mensagem

Minha filial local está à frente do mestre

onde você empurra / puxa o ramo atual

Eu estou empurrando para o GitHub e puxando para qualquer computador em que eu esteja trabalhando naquele momento, minha cópia local está sempre totalmente atualizada, já que eu sou a única trabalhando nisso.

na verdade não verifica o repository remoto

Isso é o que eu pensava, imaginei que eu me certificaria de que minha compreensão fosse correta.

você está passando alguns argumentos extras para isso?

Não que eu possa ver, talvez haja alguma configuração engraçada acontecendo do meu jeito?

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

Se você receber esta mensagem depois de fazer uma git pull remote branch , tente segui-la com uma git fetch . (Opcionalmente, execute git fetch -p para remover ramificações deletadas do repository)

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

Usar

 git pull --rebase 

A opção –rebase significa que o git irá mover seu commit local para o lado, sincronizar com o controle remoto e então tentar aplicar seus commits do novo estado.

Eu acho que você está interpretando mal a mensagem – sua filial não está à frente do master , é master . Está à frente da origin/master , que é uma ramificação de rastreamento remoto que registra o status do repository remoto do último push , pull ou fetch . Está dizendo exatamente o que você fez; você ficou à frente do controle remoto e está te lembrando de empurrar.

Use estes 3 comandos simples

Etapa 1 : git checkout

Passo 2 : git pull -s recursive -X theirs

Passo 3 : git reset --hard origin/

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

Apreciar.

Alguém disse que você pode estar interpretando mal sua mensagem, você não está. Este problema realmente tem a ver com o seu arquivo /.git/config . Nele será uma seção semelhante a esta:

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

Se você remover a linha de busca do arquivo .git / config do seu projeto, você irá parar o “Seu ramo está à frente de ‘origem / mestre’ por N cometer.” aborrecimento de ocorrer.

Ou então eu espero. 🙂

No meu caso, foi porque mudei para master usando

  git checkout -B master 

Só para puxar a nova versão dele em vez de

  git checkout master 

O primeiro comando redefine o chefe do mestre para meus últimos commits

eu usei

 git reset --hard origin/master 

Para consertar isso

Eu tive esse problema no meu servidor de palco, onde eu só puxa. E a reboot total me ajudou a limpar a CABEÇA da mesma maneira que a remota.

 git reset --hard origin/master 

Então agora eu tenho novamente:

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

Eu tive esse mesmo problema em uma máquina Windows. Quando eu executei um comando git pull origin master , eu recebia o aviso “ahead of ‘origin / master’ por X commits”. Descobri que, se eu, ao invés, executasse o git pull origin e NÃO especificasse o branch, então não receberia mais o aviso.

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

 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 

Melhor sorte

Apenas lembra as diferenças entre o ramo atual e o ramo que faz a trilha atual. Por favor, forneça mais informações, incluindo o ramo que está impresso na mensagem e onde você empurra / puxa o ramo atual.

Embora essa questão seja um pouco antiga … Eu estava em uma situação semelhante e minha resposta aqui me ajudou a corrigir um problema semelhante que tive

Primeiro tente com push -f ou opção de força

Se isso não funcionasse, é possível que (como no meu caso) os repositorys remotos (ou melhor, as referências a repositorys remotos que aparecem no git remote -v ) possam não estar sendo atualizados.

O resultado acima é que o seu push sincronizou seu local / filial com o seu remote / branch, entretanto, o cache em seu repository local ainda mostra commit anterior (de local / branch … desde que apenas single commit tenha sido enviado) como HEAD.

Para confirmar o acima, clone o repository em um local diferente e tente comparar o local / ramo HEAD e remoto / ramo HEAD. Se os dois 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 que seu comando não tem mais origin !

Faça um git pull agora git pull github master

no git status receber

# On branch master

nothing to commit (working directory clean)

Espero que isso seja útil para alguém, pois o número de visualizações é tão alto que a pesquisa desse erro quase sempre lista esse segmento no topo

Consulte também gitref para detalhes

Eu realmente tive isso acontecendo quando eu estava fazendo um switch / checkout com TortiseGIT.

Meu problema era que eu tinha criado o ramo com base em outro ramo local. Ele criou uma input “merge” em /.git/config que se parecia com algo assim:

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

Onde sempre que eu mudava para o ramo “web”, estava me dizendo que eu tinha 100+ commits antes do desenvolvimento. Bem, eu não estava mais me comprometendo a desenvolver, então isso era verdade. Consegui simplesmente remover essa input e parece estar funcionando como esperado. Ele está rastreando corretamente com o ref remoto em vez de reclamar sobre estar por trás do ramo de desenvolvimento.

Como disse Vikram, esse segmento do Stack Overflow é o principal resultado no Google ao pesquisar esse problema, então pensei em compartilhar minha situação e solução.

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

O último arquivo registra o HEAD da última busca (para o repository / ramificação). Fazer o git fetch atualiza os dois arquivos para o HEAD atual da filial.
É claro que se não houver nada para buscar (porque o repository local já está atualizado), então .git/FETCH_HEAD não muda.

Gostaria de reiterar o mesmo mencionado pelo @Marian Zburlia acima. Funcionou para mim e sugeriu o mesmo para os outros.

git pull origin develop

deve ser seguido por $ git pull --rebase .

Isso removerá os comentários no $ git status após o último pull.

Se você receber esta mensagem depois de fazer um commit para descompactar o arquivo na ramificação, tente fazer algumas alterações em qualquer arquivo e executar commit. Aparentemente, você não pode fazer um commit único, que inclui apenas untracking arquivo previamente rastreado. Finalmente este post me ajudou a resolver todo o problema https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Eu só tive que remover o arquivo do histórico do repository.

git fetch resolverá isso para você

Se meu entendimento estiver correto, sua origin/master local (em cache) está desatualizado. Este comando atualizará o estado do repository do servidor.