Sua filial está à frente de 'origem / mestre' em 3 commits

354

Estou recebendo o seguinte ao executar git status

Your branch is ahead of 'origin/master' by 3 commits.

Eu li em algum outro post a maneira de corrigir isso é executado, git pull --rebasemas o que exatamente é rebase, vou perder dados ou é essa maneira simples de sincronizar com o mestre?

FluxEngine
fonte
19
Eu não acho que seja uma duplicata ... Esta pergunta está perguntando o que significa, enquanto a outra pergunta está perguntando como descartar as alterações.
onionjake
11
Como isso foi marcado como duplicado por tantas pessoas? A pergunta obviamente indica que a pessoa não quer perder suas alterações. Eles fizeram alterações e ficam confusos com a mensagem. A chamada pergunta duplicada faria a pessoa perder suas alterações.
Derek Greer
4
Eu tenho que dizer que a questão link acima não é realmente uma duplicata de esta pergunta ...
Dave Kanter
15
@DerekGreer: como isso foi marcado como duplicado? Porque a maioria das pessoas que marcam as perguntas como duplicadas não se preocupam em realmente ler e entender a pergunta. Se houver semelhanças superficiais, eles chegarão à conclusão de que os dois são idênticos, e caberá ao OP ou a outros que estão dispostos a reservar um tempo para repetir cuidadosamente o que deveria ter sido óbvio em primeiro lugar, se o os caçadores de duendes realmente se preocuparam em prestar atenção.
Iconoclast
6
^^^ cuja prática está matando SO, IMO.
Geek Stocks

Respostas:

767

Você recebe essa mensagem porque fez alterações no seu mestre local e não as enviou para o controle remoto. Você tem várias maneiras de "resolvê-lo" e normalmente depende da aparência do seu fluxo de trabalho:

  • Em um bom fluxo de trabalho, sua cópia remota do mestre deve ser boa, enquanto sua cópia local do mestre é apenas uma cópia da remota. Usando esse fluxo de trabalho, você nunca receberá essa mensagem novamente.
  • Se você trabalha de outra maneira e suas alterações locais devem ser enviadas, basta git push originassumir que a origem é seu controle remoto
  • Se as alterações locais forem ruins, basta removê-las ou redefinir o mestre local para o estado no controle remoto git reset --hard origin/master
iberbeu
fonte
82
git reset --hard origin / master é exatamente o que eu estava procurando. Obrigado.
FluxEngine
4
@iberbeu você resolveu meu dia ... git reset --hard origin / master é o que eu estou procurando. + 1ed
Ravi
75
Também fwiw git diff master origin/master(ie. git diff local remote) Para ver as alterações que você
removerá
11
Eu tenho local / master na origem / filial remota, então usei git push origin master:branchque retornou Everything up-to-date, depois que a mensagem de estar à frente por x commits foi embora.
fyrye
2
O último me deu o que eu precisava lá!
ryang
38

Não há nada para consertar. Você simplesmente fez 3 confirmações e ainda não as moveu para a ramificação remota. Existem várias opções, dependendo do que você deseja fazer:

  • git push: mova suas alterações para o controle remoto (isso pode ser rejeitado se já houver outras alterações no controle remoto)
  • não faça nada e continue codificando, sincronize outro dia
  • git pull: obtenha as alterações (se houver) do controle remoto e junte-as às alterações
  • git pull --rebase: como acima, mas tente refazer seus commits além das alterações remotas

Você está em uma situação clássica (embora normalmente você não se comprometa muito com o mestre na maioria dos fluxos de trabalho). Aqui está o que eu normalmente faria: Revise minhas alterações. Talvez faça git rebase --interactivealguns cosméticos neles, largue os que sugam, reordene-os para torná-los mais lógicos. Agora mova-os para o controle remoto com git push. Se isso for rejeitado porque minha filial local não está atualizada: git pull --rebaserefazer meu trabalho além das alterações mais recentes git push.

pmr
fonte
Eu costumava --rebase git pull, mas agora diz que eu estou à frente por um commit
FluxEngine
Então, eu fiz as alterações, instalei o master e, em seguida, o líder da nossa equipe se fundiu ao master. Portanto, as mudanças estão aí, eu só preciso ser sincronizado com o mestre atual.
FluxEngine
@MartyMcFly É difícil ver o que está acontecendo aqui. Você diz que já empurrou? Então, por que você ainda confirma que não está no mestre? Como assim your team lead merged to master? Você não disse que já tentou dominar? O que o commit extra contém? Tente git diff origin/masterver como sua filial local difere do controle remoto.
quer
11
obrigado pela ajuda, desculpe se fiz um mau trabalho explicando a situação. Mas o que eu estava procurando é git reset --hard origin / master. Mas sua resposta foi útil +1.
FluxEngine
Pareço estar preso entre uma rocha e um lugar difícil, tentei fazer alterações e, em seguida, git disse: você está à frente de 11 confirmações. Não tenho permissão para atualizar o repositório remoto, portanto, não é possível pressionar. "git pull" diz: Já atualizado. Então, tentei sua terceira sugestão, mas o git diz: não é possível puxar com rebase: você tem alterações sem etapas. por favor, cometa ou esconda-os. Duh, foi assim que cheguei aqui em primeiro lugar :-(
Sander de Jong
36

Use estes 4 comandos simples

Etapa 1 :git checkout <branch_name>

É óbvio entrar nesse ramo.

Etapa 2 :git pull -s recursive -X theirs

Faça alterações remotas nas ramificações e substitua-as pelas alterações, se houver conflito. Aqui, se você git statusconseguir algo assim, seu ramo estará à frente de 'origin / master' em 3 commits.

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

Etapa 4 :git fetch

Reinicialize seu ramo com força.

Aproveitar.

Abhishek Goel
fonte
17

Me deparei com esse problema após mesclar uma solicitação de recebimento no Bitbucket.

Tive que fazer

git fetch

e foi isso.

pragman
fonte
2
Eu estava trabalhando com um repositório de um pacote e consegui me livrar da mensagem aplicando "git fetch" a um pacote atual. tnx!
Martin Meeser
Em um check-out somente leitura, meu status git mostrou que eu tinha 2 confirmações à frente, o log parecia como deveria - todas as confirmações na origem. Eu fiz um git pull e estava 5 commits à frente..WTF ???? Só precisava buscar para atualizar índices locais ... tudo de bom :)
Chris Rutledge
12

Normalmente, se eu tiver que verificar quais são os commits que diferem do master que eu faço:

git rebase -i origin/master

Desta forma, eu posso ver os commits e decidir abandoná-lo ou escolher ...

Alex
fonte
Essa resposta humilde até aqui era o que eu precisava fazer. Eu não conseguia descobrir como descobrir a diferença, e todas as minhas várias git diff ...mágicas não funcionariam. Quando fiz isso, ele me deu noopcomo o único commit e, quando o aceitei, agora minha ramificação está sincronizada com a origem / mestre. Portanto, parece que os commits diff da origem / mestre não estavam em efeito.
philo vivero 24/02
11

Esta mensagem de gitsignifica que você fez três confirmações em seu masterrepositório local e não as publicou no repositório. O comando a ser executado para isso é git push {local branch name} {remote branch name}.

O comando git pull(e git pull --rebase) é para a outra situação em que há confirmação no repositório remoto que você não possui no repositório local. A --rebaseopção significa que gitirá afastar a confirmação local, sincronizar com o repositório remoto e tentar aplicar as três confirmações no novo estado. Pode falhar se houver conflito, mas você será solicitado a resolvê-lo. Você também pode abortar rebasese não souber como resolver os conflitos usando git rebase --aborte voltará ao estado antes de executar git pull --rebase.

Sylvain Defresne
fonte
7

Se o seu git diz que você está comprometido com a frente, então apenas Primeiro,

origem do push git

Para garantir que você tenha enviado todos os seus trabalhos mais recentes no repositório

Então,

git reset --hard origem / master

Para redefinir e combinar com o repositório

Pratik Khadka
fonte
4

Isso aconteceu comigo uma vez após mesclar uma solicitação de recebimento no Bitbucket.

Eu só tinha que fazer:

git fetch

Meu problema foi resolvido. Eu espero que isso ajude!!!

Sudhir Vishwakarma
fonte
0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

finalmente:

$ git push origin
sandes
fonte