Eu sou novo no GitHub . Hoje encontrei um problema quando estava tentando enviar meu código para o GitHub.
Pushing to [email protected]:519ebayproject/519ebayproject.git
To [email protected]:519ebayproject/519ebayproject.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Ainda não enviei nada no repositório, então por que preciso extrair alguma coisa?
Respostas:
Se você não deseja mesclar a ramificação remota em sua ramificação local (consulte as diferenças com o git diff ) e quiser fazer um push forçado, use o comando push com -f
onde
origin
é o nome do seu repositório remoto .fonte
$ git pull origin master -v
mas dá errofatal: refusing to merge unrelated histories
. Então eu tentei isso e funcionou e meus arquivos locais apareceram no repositório remoto do github.Como a mensagem diz,
Use
git pull
para extrair as alterações mais recentes do repositório remoto para o repositório local. Nesse caso, puxar alterações exigirá uma mesclagem porque você fez alterações no seu repositório local.Vou fornecer um exemplo e uma imagem para explicar. Vamos supor que a sua última atração da origem / ramificação tenha sido no Commit B. Você concluiu e comprometeu algum trabalho (Commit C). Ao mesmo tempo, outra pessoa concluiu seu trabalho e o empurrou para a origem / filial (Confirmação D). Será necessário haver uma mesclagem entre esses dois ramos.
Porque você é o único que deseja pressionar, o Git obriga a executar a mesclagem. Para fazer isso, você deve primeiro extrair as alterações da origem / ramificação.
Após concluir a mesclagem, você poderá avançar rapidamente a origem / ramificação para o Commit E pressionando suas alterações.
O Git exige que você lide com as mesclagens, porque uma mesclagem pode levar a conflitos.
fonte
git pull
também impressoAlready up-to-date
. Acontece que eu não estava no ramo que eu estava, mas um ramo HEAD desanexado (possivelmente de uma falha na mesclagem?). Isso ficou óbvio após a execuçãogit branch
. Depois de executargit checkout mybranch
tudo funcionou como esperado.Você atualizou seu código antes de enviar?
Use
git pull origin master
antes de empurrar qualquer coisa.Presumo que você esteja usando
origin
como um nome para o seu controle remoto.Você precisa puxar antes de enviar, para atualizar seu repositório local antes de enviar algo (apenas no caso de alguém já ter atualizado o código
github.com
). Isso ajuda a resolver conflitos localmente.fonte
git pull origin master
git reclama que'origin' does not appear to be a git repository
git remote --verbose
para ver todo o controle remoto configurado na sua pasta git. As informações mostradas na tela também incluirão caminhos "[email protected]" ou caminhos HTTPS, dos quais você poderá identificar para onde enviar. Espero que isto ajude !git pull origin master
mostrando Já atualizado. mas, quando tentar pressionar origin_branch, diga o mesmo aviso mencionado em questão. Alguma sugestão !!git push -f <remote> <branch>
por exemplo, origem do git push <your_local_branch>, verifique este tópico .Isso normalmente acontece quando você
git commit
tenta fazergit push
alterações anteriormentegit pulling
naquele ramo emx
que outra pessoa já fez alterações.O fluxo normal seria como abaixo,
PASSO 1 :
git stash
suas alterações locais não confirmadas nesse ramo.PASSO 2 :
git pull origin branch_name -v
parapull and merge
as alterações confirmadas localmente nesse ramo ( transmita alguma mensagem a essa mesclagem e corrija conflitos, se houver ) .ETAPA 3 :
git stash pop
asstash
alterações editadas ( você pode fazer confirmações nos arquivos pop-up se desejar ou enviar as alterações já confirmadas (STEP4) primeiro e fazer novas confirmações nos arquivos posteriormente. )PASSO 4 :
git push origin branch_name -v
as alterações mescladas.Substitua
branch_name
pormaster
(paramaster
ramificação).fonte
commit
? Você não deve confirmar suas alterações depoisstash pop
?Primeira e simples solução (não recomendado)
git push -f origin master
.Solução recomendada
Se isso não funcionar, siga 🔰
.git
diretório da pasta.Em seguida, execute estes comandos:
OU
Use apenas
git push -f origin master
se-u
não funcionar para você.Isso resolverá quase todos os tipos de erros que ocorrem ao enviar seus arquivos.
fonte
Às vezes esquecemos o puxão e fizemos muitos trabalhos no ambiente local.
Se alguém quiser empurrar sem puxar,
está funcionando. Isso não é recomendado quando se trabalha com outras pessoas, mas quando o seu trabalho é uma coisa simples ou um projeto pessoal de brinquedos, será uma solução rápida.
fonte
reset --hard
para um commit mais antigo e depois fiz mais algumas. Só queria,push
mas o repositório remoto não estava preparado para me permitir. O WarrenP poderia realmente ajudar os alunos a ser menos rúnicos. Talvez ele não queira.Alguns de vocês podem estar recebendo esse erro porque o Git não sabe em qual ramificação você está tentando enviar.
Se a sua mensagem de erro também incluir
convém seguir as dicas úteis de Jim Kubicek, Configurar o Git para enviar apenas a ramificação atual , para definir a ramificação padrão como atual.
fonte
Isso funcionou para mim - o comando
git pull origin branch_name --rebase
puxará as alterações do branch_name remoto primeiro, depoisrebase
o branch atual na parte superior.fonte
Além das respostas acima, o seguinte funcionou para mim: -
Cenário -
Solução -
fonte
--all
bandeira.Eu tive o mesmo problema, o que fiz foi primeiro empurrá-lo à força usando este
Fiz isso depois de confirmar os arquivos e estava recebendo um erro como você conseguiu.Ele confirmou todos os arquivos e os empurrou. Então, da próxima vez que eu estava empurrando para o github. Eu fiz o que ele me pediu e estava tudo bem então. Espero que isto funcione para você também :)
fonte
git push --set-upstream origin master --force
Eu mencionei isso no meu tutorial, Como usar o GitHub: um tutorial para iniciantes .
Quando você cria um novo repositório no GitHub, o GitHub pode solicitar que você crie um arquivo leia-me. Se você criar um arquivo leia-me diretamente no GitHub, precisará primeiro fazer uma solicitação 'pull' antes que a solicitação 'push' seja bem-sucedida. Esses comandos 'puxam' o repositório remoto, os mesclam com os arquivos atuais e depois 'enviam' todos os arquivos de volta ao GitHub:
fonte
Eu estava recebendo a mensagem de erro acima mencionada quando tentei enviar por push minha ramificação atual
foobar
:Acontece que eu tinha duas filiais locais rastreando a mesma filial remota:
Funcionou para mim enviar minha ramificação atual usando:
... e limpar com
git branch -d
fonte
origem do git push -f nome da filial
Use o comando acima apenas se tiver certeza de que não precisa de código de ramificação remota, caso contrário, mescle primeiro e empurre o código
fonte
Se você não deseja entrar no seu projeto atual (e, potencialmente, enfrentar conflitos de mesclagem que não deseja resolver) e não deseja criar outro ramo (isso será tedioso para gerenciar outro ramo), e você não não quero executar
force
comandos git arriscados e permanentes (que, mesmo depois de ler o que fazem, geralmente fico surpreso com as implicações de fazê-lo).Solução : você pode simplesmente arrastar o conteúdo da pasta para outra pasta, puxar o projeto para a pasta agora vazia, arrastar o conteúdo puxado para a lixeira e arrastar o projeto correto de volta para a pasta. Você deve poder pressionar corretamente e obter os resultados desejados. Literalmente, levo menos de 10 segundos para fazer isso.
Para as pessoas que me diriam que isso não é apropriado sem citar nenhuma conseqüência, ou as pessoas que me dizem para usar um comando que me cause aborrecimentos futuros, digo: "Esse método literalmente leva menos de 10 segundos". Se eu encontrar um comando git que leva menos de 10 segundos para implementar e tem exatamente o mesmo efeito, adotarei isso. Até então, estou usando esse método.
Uma desvantagem desse método é que seu histórico de consolidação aparecerá linear quando você realmente mesclar em uma ramificação sem que a mesclagem seja documentada. Esse pode não ser o melhor método ao trabalhar com grupos. Trabalhe em galhos nesses casos!
fonte
Só tive o mesmo problema, mas no meu caso eu digitei o ramo errado no controle remoto. Portanto, parece que é outra fonte desse problema ... verifique novamente que você está enviando para o ramo correto.
fonte
Tive o mesmo problema e, por acaso, eu estava em um ramo (local) diferente do que eu pensava e o ramo local correto estava atrasado em confirmações remotas.
Minha solução: faça o checkout da ramificação correta, escolha a confirmação da outra ramificação local, git pull e git push
fonte
Eu tive um problema semelhante e constatou que meu fluxo de trabalho para manter minha filial atualizada estava com falha. Eu estava fazendo o seguinte:
No meu 'mestre' local
então de volta na minha filial local
Isso funcionou bem para um fluxo git anterior, mas não com o github. O
git rebase
problema aqui estava causando problemas com a sincronização (e admito que é algo que tive que aceitar sem entender completamente) e, infelizmente, me colocou em uma posição em quegit push -f
provavelmente se tornou a opção mais fácil. Não é bom.Meu novo fluxo é atualizar a ramificação diretamente usando
git merge
o seguinte:Na minha filial local
Não há avanço rápido, pois terei feito mudanças de rumo na filial local.
Como você provavelmente pode perceber, não sou especialista em git, mas sou informado com segurança de que esse fluxo de trabalho provavelmente evitará os problemas específicos que tive.
fonte
No meu caso, eu havia feito o "mybranch" e o feito
git pull
, então não consegui descobrir por que o impulso não estava funcionando. Eventualmente, eu percebi que estava empurrando o ramo errado. Eu estava digitando emgit push origin master
vez degit push origin mybranch
.Portanto, se você já fez
git pull
e ainda recebe essa mensagem, verifique se está enviando a ramificação correta.fonte
O nome da sua filial é igual ao nome da filial remota?
Se não, você deve fazer check-out de uma nova ramificação com o mesmo nome da ramificação remota e tentar enviá-la novamente.
Suponha que a ramificação remota que você deseja enviar seja [ testing ] e sua ramificação local seja nomeada como [ test ].
Se você não estiver no ramo de teste , primeiro mude para ele.
Em seguida, abra uma nova ramificação e denomine-a de teste .
Agora, é hora de pressionar:
fonte
$git branch -M <new_name>
para renomear filial local.Eu resolvi esse problema no meu repositório GIT. Não há necessidade
rebase
ouforce
confirmação neste caso. Use as etapas abaixo para resolver isso -espero que ajude.
fonte
Outra solução é avançar o chefe do controle remoto, fazendo outro commit, se possível. Depois de puxar essa cabeça avançada para a subárvore local, você poderá empurrá-la novamente.
fonte
Eu estava recebendo um erro semelhante ao enviar as alterações mais recentes para um repositório Git vazio que eu uso para o gitweb . No meu caso, não fiz nenhuma alteração no repositório vazio, então simplesmente excluí meu repositório vazio e clonei novamente:
fonte
Se você tem certeza de que ninguém fez alterações no seu repositório git e está trabalhando na versão mais recente,
git pull
não faz sentido como uma solução em seu coração ...Então foi provavelmente o que aconteceu, você usou
git commit --amend
Tutorial ATLASSIAN: reescrevendo o histórico
No entanto, não é recomendável executar
git commit --amend
se você já enviou o commit ao GitHub , porque "alterar não apenas altera o commit mais recente - ele o substitui inteiramente. Para o Git, ele parecerá um commit totalmente novo" o que significa para outro desenvolvedor no seu GitHub, o histórico se parece com A-> B-> C, mas para você se parece com A-> B-> D, se o GitHub permitirpush
, todos os outros terão que corrigir manualmente o históricoEssa é a razão pela qual você recebe a mensagem de erro
! [rejected] master -> master (non-fast-forward)
. Se você sabe que ninguém efetuou a alteração mais recente, você pode fazê-git push --force
lo. Isso alterará o histórico do git em seu repositório público . Caso contrário ... você pode executargit pull
, mas acredito que isso terá o mesmo resultado que você não passougit commit --amend
, ele criará um novo commit (por exemplo: histórico do git após o git pull: A-> B-> C-> D )para obter mais detalhes: Como alterar seu último commit
fonte
Outra opção: renomeie localmente sua filial para algo novo.
Você poderá enviá-lo ao repositório remoto, por exemplo, se essa é a sua maneira de manter uma cópia (backup) e garantir que nada se perca.
Você pode buscar a filial remota para obter uma cópia local e examinar as diferenças entre (i) o que o controle remoto possuía (com o nome antigo da filial) e (ii) o que você possui (com o novo nome da filial) e decidir o que fazer . Como você não estava ciente das diferenças do controle remoto (daí o problema), simplesmente mesclar ou forçar alterações em algum lugar é muito brutal.
Observe as diferenças, escolha em qual filial você deseja trabalhar, escolha as alterações desejadas na outra filial ou reverta as alterações que você não deseja na filial que você possui etc.
Então você deve estar em posição de decidir se deseja forçar sua versão limpa no controle remoto ou adicionar novas alterações, ou o que for.
fonte
O problema com o comando push é que seu repositório local e remoto não corresponde. Se você inicializar o leia-me por padrão ao criar um novo repositório a partir do git hub, a ramificação principal será criada automaticamente. No entanto, quando você tenta enviar isso não tem nenhum ramo. você não pode enviar por push ... Portanto, a melhor prática é criar repositório sem inicialização padrão do leia-me.
fonte
Esse problema geralmente é causado pela criação de um arquivo readme.md, que é contado como uma confirmação, não é sincronizado localmente no sistema e está faltando atrás da cabeça, portanto, mostra uma solicitação git pull. Você pode tentar evitar o arquivo leia-me e tentar confirmar. Funcionou no meu caso.
fonte
Outra causa deste problema (aparentemente não tão comum) ...
Meu servidor estava atrasado ~ 12 horas quando fiz um push
Eu configurei o NTP no servidor SYNC my clock.
Eu executei um novo git push que levou ao erro discutido neste post.
fonte
Se por acaso for
git pull
impressoAlready up-to-date
, convém verificar opush.default
parâmetro git global (In~/.gitconfig
). Configurá-lo parasimple
se estivesse emmatching
. A resposta abaixo explica por que:Git - Qual é a diferença entre push.default "matching" e "simple"
Além disso, vale a pena verificar se sua filial local está desatualizada
git remote show origin
e fazer um puxão, se necessáriofonte
use
git pull https://github.com/username/repository
É porque o Github e os repositórios remotos não estão sincronizados. Se vocêpull
repo ePush
tudo estará sincronizado e o erro desaparecerá.`
fonte
git pull
já imprimeup-to-date
solução:
você pode criar um repositório / projeto no controle remoto (servidor) e adicionar algum arquivo lá. Em seguida, novamente criou uma pasta no seu local e inicializou o git
git init
- este é o erro , você não deve criargit init
no local, mas clonar o projeto no seu local usandogit clone
então puxe
fonte