Egit rejeitou sem avanço rápido

88

Estou recebendo esta mensagem ao enviar para o repositório github. Você pode me dizer o procedimento passo a passo para corrigir isso? Eu empurrei apenas uma vez e foi bem sucedido. Mas, quando eu atualizei um projeto e tentei enviar meu segundo commit, ele mostra "master rejeitado sem avanço rápido" e não me permite enviar. Explique o procedimento.

Jay
fonte
Eu tive o mesmo problema depois de criar um novo repo com "Inicializar este repositório com um README". Eu removi aquele e criei outros novamente sem esta chechbox.
Andrew
@andrew está certo
Dany Wehbe

Respostas:

225

Eu tive esse mesmo problema e fui capaz de corrigi-lo. afk5min estava certo, o problema é que o branch do qual você puxou o código mudou desde então no repositório remoto. De acordo com as práticas padrão do git ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), você precisa (agora) mesclar essas mudanças no repositório remoto em suas mudanças locais antes de pode cometer. Isso faz sentido, obriga você a pegar outras alterações e mesclá-las em seu código, garantindo que seu código continue a funcionar com as outras alterações em vigor.

De qualquer forma, vamos para os degraus.

  1. Configure o 'fetch' para buscar o branch de onde você retirou originalmente.

  2. Busque o branch remoto.

  3. Funda esse branch remoto em seu branch local.

  4. Confirme a alteração (mesclagem) em seu repositório local.

  5. Envie a alteração para o repositório remoto.

Em detalhe...

  1. No eclipse, abra a visualização 'Repositórios Git'.

  2. Certifique-se de ver seu repositório local e pode ver o repositório remoto como uma subpasta. Na minha versão, é chamado Remotes, e então posso ver o projeto remoto dentro dele.

  3. Procure a seta verde apontando para a esquerda, esta é a seta 'buscar'. Clique com o botão direito e selecione 'Configure Fetch'.

  4. Você deve ver o URI, certifique-se de que ele aponta para o repositório remoto.

  5. Observe a seção de mapeamentos de referência do pop-up. O meu estava vazio. Isso indicará quais referências remotas você deseja buscar. Clique em 'Adicionar'.

  6. Digite o nome do branch que você precisa buscar no repositório remoto. O meu era 'master' (aliás, um dropdown aqui seria ótimo !!, por agora, você tem que digitá-lo). Continue através do pop-up, eventualmente clicando em 'Concluir'.

  7. Clique em 'Salvar e buscar'. Isso irá buscar aquela referência remota.

  8. Procure na pasta 'Ramos' do seu repositório local. Agora você deve ver essa ramificação remota na pasta remota. Novamente, vejo 'mestre'.

  9. Clique com o botão direito no branch local na pasta 'Local' de 'Branches', que é chamada de 'master'. Selecione 'Merge' e, em seguida, selecione o branch remoto, que é denominado 'origin / master'.

  10. Processe por meio da mesclagem.

  11. Confirme todas as alterações em seu repositório local.

  12. Envie suas alterações para o repositório remoto.

  13. Vá tomar uma bebida saborosa, parabenizando-se. Tire o resto do dia de folga.

Robert Bender
fonte
7
Isso deve ser marcado como a resposta. Funcionou como um encanto. Esse problema ocorre mesmo que eu não tenha adicionado nenhum arquivo (o arquivo README usual) na criação do repositório no GitHub para meu projeto no Eclipse. Muito obrigado pela explicação passo a passo fácil de seguir.
rbaleksandar
Esse problema me levou um ano para resolver, até que li sua postagem. No meu caso, eu não tinha controle remoto, mas o Eclipse criou um padrão chamado 'origem'.
Eugene van der Merwe
Legal, finalmente posso me fundir com o Eclipse. O ponto principal aqui é usar a visualização Repositórios Git para fazer a fusão, e não a visualização Team Synchronize usual. Seria bom se na visão de sincronização da equipe o eGit pudesse ter desabilitado todas as opções que não fazem nada.
Dan Carter
1
Embora isso funcione, ele cria um commit de mesclagem desnecessário. Você deve usar rebase aqui, o que é bom porque suas mudanças são apenas locais, então você não está mudando nenhum histórico publicado (e se você fizesse isso, git iria gritar com você por um push não acelerado de qualquer maneira). Eu gosto da resposta de MYN.
nyuszika7h
Clique com o botão direito do mouse no projeto e depois Mergeno master e, a seguir, clique com o botão direito novamente no projeto push branch Mastertrabalhado
user1207289
17

No meu caso, escolhi a Force Updatecaixa de seleção enquanto pressionava. Funcionou como um encanto.

BSeitkazin
fonte
Isso funcionou para mim também. Tive a condição do OP após "alterar" um commit. E buscar me deu "nada para buscar"
Twilite
11

Enquanto isso (enquanto você atualizava seu projeto), outros commits foram feitos para o branch 'master'. Portanto, você deve puxar essas mudanças primeiro para poder enviar suas alterações.

afk5min
fonte
3
neste caso o git é bastante estúpido, empurrei todas as alterações para o controle remoto. e eu sou o único a trabalhar no projeto. Por que diabos eu preciso puxar o controle remoto antes de empurrar novamente ???? a mudança puxada viria do meu local originalmente
Junchen Liu
7

Aplicável para Eclipse Luna + Eclipse Git 3.6.1

EU,

  1. repositório git clonado
  2. fez algumas mudanças no código-fonte
  3. mudanças em estágios do Git Staging View
  4. finalmente, comprometa e empurre!

E eu enfrentei esse problema com EGit e aqui está como eu consertei.

Sim, alguém confirmou as alterações antes de eu confirmar minhas alterações. Portanto, as alterações são rejeitadas. Após esse erro, as alterações são realmente confirmadas no repositório local. Eu não queria apenas fazer Pullas mudanças porque queria manter linear historyconforme apontado em - Em quais casos `git pull` pode ser prejudicial?

Então, eu executei as seguintes etapas

  1. da perspectiva do Repositório Git, clique com o botão direito no
    projeto Git em questão
  2. select Fetch from Upstream- busca atualizações remotas (refs e objetos), mas nenhuma atualização é feita localmente. para mais informações, consulte Qual é a diferença entre 'git pull' e 'git fetch'?
  3. select Rebase...- abre um pop-up, clique em Preserve merges during rebasever por que
    O que exatamente o "rebase --preserve-merges" do git faz (e por quê?)
  4. Clique em Rebase button
  5. se houver / houver um conflict(s), vá para a etapa 6, caso contrário, etapa 11
  6. um Rebase Resultpop - up aparecerá, basta clicar emOK
  7. file comparatorabriria, você precisa modificar left side file.
  8. quando terminar de mesclar as alterações corretamente, vá para a Git Stagingvisualização
  9. stage the changes. ieadd to index
  10. na mesma vista, clique em Rebase-> Continue. repita 7 a 10 até que todos os conflitos sejam resolvidos.
  11. da Historyvisualização, selecione sua linha de confirmação e selecionePush Commit
  12. marque a Rebase Commits of local.......caixa de seleção e clique em próximo. consulte o porquê - Git: rebase no branch de desenvolvimento do upstream
  13. Clique em Finish

Nota: se você tiver múltiplos commits de repositório local, você precisa comprimi-los em um commit para evitar múltiplos merges.

Yogesh Manware
fonte
Eu concordo com o uso de rebase em vez de mesclar. É melhor porque não cria um commit de mesclagem desnecessário. (Fora do tópico: Stack Overflow está sendo totalmente ridículo e rejeita meu comentário apenas com base no fato de que eu escrevi originalmente "+1 para". Meu comentário é perfeitamente construtivo, obrigado.)
nyuszika7h
4

Configurar Depois de enviar o código ao receber uma mensagem rejeitada, clique em configurar e clique em Adicionar especificações, conforme mostrado nesta imagem

Ref da fonte e ref do destino Desça e clique em ref / heads / yourbranchname e clique em Add Spec novamente

insira a descrição da imagem aqui Certifique-se de selecionar a atualização de força

insira a descrição da imagem aqui Por fim, salve e envie o código ao repo

Vineela Thonupunuri
fonte
3

Abra o git view:

1- selecione seu projeto e escolha mesclar 2- Selecione rastreamento remoto 3- clique em ok

Git irá mesclar o branch remoto com o repositório local

4- então empurre

Dafali
fonte
1

Este erro significa que o repositório remoto teve outros commits e acelerou à frente do seu branch local.
Tento fazer um git pull seguido por um git push. Se não houver alterações conflitantes, git pull obtém o código mais recente para meu branch local, mantendo minhas alterações intactas.
Em seguida, um push git empurra minhas alterações para o branch master.

Pushkin
fonte
parece que muitas pessoas estão perdendo esta resolução simples: D
Preto
0

Eu descobri que você deve estar no último commit do git. Portanto, estes são os passos a serem executados: 1) certifique-se de não estar trabalhando nos mesmos arquivos, caso contrário, você encontrará um erro DITY_WORK_TREE. 2) extraia as últimas mudanças. 3) comprometa suas atualizações.

Espero que isto ajude.

Poderoso Elemental
fonte
-1
  1. Vá no Github e crie um repositório para seu novo código.
  2. Use o novo URL https ou ssh no Eclise quando estiver fazendo o push para o upstream;
Adrian Filipescu
fonte