Como isso realmente acontece?
Atualmente, estou trabalhando em um repositório sozinho, então este é o meu fluxo de trabalho:
- Alterar arquivos
- Confirmar
- Repita 1-2 até ficar satisfeito
- Pressione para dominar
Então, quando eu faço um git status
, diz-me que meu ramo está à frente de confirmações de X (presumivelmente o mesmo número de confirmações que eu fiz). É porque, quando você pressiona o código, ele não atualiza seus arquivos armazenados em cache localmente (nas pastas .git)? git pull
parece 'consertar' essa mensagem estranha, mas ainda estou curioso 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
Estou migrando para o GitHub e acessando o computador em que estou trabalhando naquele momento, minha cópia local está sempre atualizada, pois sou a única a trabalhar nela.
na verdade, não verifica o repositório remoto
Foi isso o que pensei, pensei em garantir que meu entendimento estivesse correto.
você está passando alguns argumentos extras para ele?
Não os que eu posso ver, talvez haja alguma configuração engraçada acontecendo do meu lado?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
fonte
push
e quais são as definições de configuração remota e de ramificação?git status
não verifica o repositório remoto,git pull
faz. Se você tiver uma ramificação de rastreamento para um repositório para o qual você envia por push,git push
atualizará sua ramificação de rastreamento local para refletir o novo estado da ramificação remota se o envio for bem-sucedido. É por isso que perguntei sobre a configuração do solicitante, porque se isso não estiver acontecendo corretamente, provavelmente haverá um erro de configuração.git status
? mesmo? o meugit status
nunca me diz a que distância meu ramo está .. você está passando alguns argumentos extras para ele?git status
não vai ao repositório remoto para verificar se o ramo remoto foi atualizado. Indica a que distância sua filial local é comparada à filial de rastreamento remoto armazenada localmente . O problema é que um normalgit push
(assim como buscar e puxar) deve atualizar a ramificação de rastreamento remoto e, para o solicitante, isso não parece estar funcionando. Para entender por que precisamos ver a forma exatagit push
disso sendo usada e a configuração do repositório local, mas como o solicitante já aceitou uma resposta, não vejo isso acontecendo agora.Respostas:
Se você receber esta mensagem depois de fazer a
git pull remote branch
, tente segui-la com agit fetch
. (Opcionalmente, executegit fetch -p
a remoção de ramificações excluídas do repositório)A busca parece atualizar a representação local da ramificação remota, o que não acontece necessariamente quando você faz um
git pull remote branch
.fonte
Usar
A opção --rebase significa que o git afastará seu commit local, sincronizará com o controle remoto e tentará aplicar seus commit no novo estado.
fonte
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
e nunca reescreva sem pensar a história!Use estes 3 comandos simples
Etapa 1 :
git checkout <branch_name>
Etapa 2 :
git pull -s recursive -X theirs
Etapa 3 :
git reset --hard origin/<branch_name>
Mais detalhes: https://stackoverflow.com/a/39698570/2439715
Aproveitar.
fonte
git reset --hard origin/master
esclareceu para mim.Acho que você está interpretando mal a mensagem - seu ramo não está à frente
master
, estámaster
. É antes deorigin/master
, que é um ramo de monitoramento remoto que registra o estado do repositório remoto de seu últimopush
,pull
oufetch
. Está dizendo exatamente o que você fez; você ficou à frente do controle remoto e está lembrando que você deve empurrar.fonte
Alguém disse que você pode estar interpretando mal sua mensagem, não está. Esse problema realmente tem a ver com seu
<project>/.git/config
arquivo. Nele haverá uma seção semelhante a esta:Se você remover a linha de busca do arquivo .git / config do seu projeto, interromperá a opção "Sua ramificação está à frente de 'origem / mestre'
N
confirmação ". aborrecimento de ocorrer.Ou assim espero. :)
fonte
ahead by x commits
mensagem. Não vejo a mensagem há algum tempo.Eu tive esse problema no meu servidor de palco, onde apenas puxa. E o hard reset ajudou-me a limpar o HEAD da mesma forma que o controle remoto.
Então agora eu tenho novamente:
fonte
Isso funcionou para mim
git reset --hard origin/master
A saída deve se parecer com
On branch dev HEAD is now at ae1xc41z Last commit message
fonte
No meu caso, foi porque mudei para o master usando
Apenas para puxar a nova versão em vez de
O primeiro comando redefine o chefe do mestre para minhas últimas confirmações
eu usei
Para consertar isso
fonte
Passei por todas as soluções desta página e, felizmente, @ anatolii-pazhyn comentou porque sua solução foi a que funcionou. Infelizmente, não tenho reputação suficiente para votar novamente, mas recomendo tentar sua solução primeiro:
O que me deu:
Eu também recomendo:
Você também pode usar:
Boa sorte
fonte
Eu tive esse mesmo problema em uma máquina Windows. Quando eu executava um
git pull origin master
comando, recebia o aviso "à frente de 'origem / mestre' por X confirma". Descobri que se eu executassegit pull origin
e NÃO especificasse a ramificação, não receberia mais o aviso.fonte
git fetch
nos bastidores.Apenas lembra as diferenças entre o ramo atual e o ramo que faz a trilha atual. Forneça mais informações, incluindo o ramo impresso na mensagem e onde você pressiona / puxa o ramo atual.
fonte
Embora essa pergunta seja um pouco antiga ... eu estava em uma situação semelhante e minha resposta aqui me ajudou a corrigir um problema semelhante que tive
Primeira tentativa com
push -f
ou forçar a opçãoSe 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
git remote -v
) possam não estar sendo atualizados.O resultado acima de seu envio sincronizar seu local / filial com seu remoto / filial, no entanto, o cache em seu repositório local ainda mostra confirmação anterior (de local / filial ... desde que apenas uma confirmação única tenha sido enviada) como HEAD.
Para confirmar o clone acima, repo em um local diferente e tente comparar o HEAD local / ramo e o HEAD remoto / ramo. Se os dois são iguais, provavelmente você está enfrentando o problema que eu fiz.
Solução:
Agora faça o
push -f
seguintegit push -f github master
### Observe que seu comando não possuiorigin
mais!Faça um
git pull
agoragit pull github master
em
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 busca por esse erro quase sempre lista esse tópico no topo
Consulte também gitref para obter detalhes
fonte
Eu realmente tive isso acontecendo quando eu estava fazendo uma troca / verificação com o TortiseGIT.
Meu problema era que eu criei a ramificação com base em outra ramificação local. Ele criou uma entrada de "mesclagem"
/.git/config
que se parecia com isso:Onde, sempre que eu mudei para o ramo "web", estava me dizendo que eu tinha mais de 100 confirmações antes do desenvolvimento. Bem, eu não estava mais me comprometendo a me desenvolver, e isso era verdade. Consegui simplesmente remover esta entrada e parece estar funcionando conforme o esperado. Ele está rastreando corretamente com o árbitro remoto em vez de reclamar por estar atrás do ramo de desenvolvimento.
Como Vikram disse, esse encadeamento de estouro de pilha é o principal resultado do Google ao procurar esse problema, então pensei em compartilhar minha situação e solução.
fonte
Gostaria de reiterar o mesmo que mencionado por @Marian Zburlia acima. Funcionou para mim e sugeriria o mesmo para os outros.
git pull origin develop
deve ser seguido por
$ git pull --rebase
.Isso removerá os comentários que aparecerem
$ git status
após a última atração.fonte
git fetch
vai resolver isso para vocêSe meu entendimento estiver correto, seu local (em cache)
origin/master
está desatualizado. Este comando atualizará o estado do repositório do servidor.fonte
Minha experiência é em um ambiente de equipe com muitos ramos. Trabalhamos em nossas próprias filiais de recursos (em clones locais) e foi uma daquelas que
git status
mostraram que eu tinha 11 comprometimentos à frente. Minha suposição de trabalho, como o autor da pergunta, era que +11 era de meus próprios commits .Aconteceu que eu havia retirado as alterações do
develop
ramo comum para o meu recurso muitas semanas antes - mas esqueci! Quando revisitei minha filial local hoje e fiz umgit pull origin develop
número saltou para +41 confirma à frente. Muito trabalho foi feitodevelop
e, portanto, meu ramo de recursos local estava ainda mais à frente do ramo de recursos noorigin
repositório.Portanto, se você receber essa mensagem, lembre-se de quaisquer puxões / mesclagens que você possa ter feito de outros ramos (de sua preferência ou de outros) aos quais tenha acesso. A mensagem apenas indica que você precisa que
git push
essaspull
alterações sejam retornadas aoorigin
repositório ('ramo de rastreamento') do repositório local para sincronizar as coisas.fonte
As respostas que sugerem
git pull
ougit fetch
estão corretas.A mensagem é gerada quando
git status
vê uma diferença entre.git/FETCH_HEAD
e.git/refs/remotes/<repository>/<branch>
(por exemplo.git/refs/remotes/origin/master
).O último arquivo registra o HEAD da última busca (para o repositório / filial). Doing
git fetch
atualiza os dois arquivos no HEAD atual da ramificação.Obviamente, se não houver nada para buscar (porque o repositório local já está atualizado),
.git/FETCH_HEAD
isso não será alterado.fonte
.git/FETCH_HEAD
contém9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
e.git/refs/remotes/origin/master
contém9f7336c873ccffc772168bf49807e23ff74014d3
, mas ainda assim recebo a mensagem egit pull
nem agit fetch
resolvoSe você receber esta mensagem após fazer uma confirmação para não rastrear o arquivo na ramificação, tente fazer alguma alteração em qualquer arquivo e execute a confirmação. Aparentemente, você não pode fazer um único commit, que inclui apenas o rastreamento de arquivos rastreados anteriormente. Finalmente, este post me ajudou a resolver todo o problema https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Eu apenas tive que remover o arquivo do histórico do repositório.
fonte