git: O seu ramo está à frente por commits X
-
19-09-2019 - |
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:
- alterar arquivos
- Commit
- Repita 1-2 até satisfeito
- 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)
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
git checkout <branch_name>
git pull -s recursive -X theirs
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 pull
ed 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.