Nosso branch master remoto de alguma forma ficou confuso. O código de desenvolvimento atual está no branch master junto com os commits mais recentes. Obviamente, o código de desenvolvimento não está pronto para o branch master.
Então, em meu repositório local, fiz uma redefinição para a tag mais recente git reset --hard (Tag)
,. O branch master agora está correto no meu repositório local. Agora, quando tento enviar as alterações para o repositório remoto git push origin master
, recebo um erro:
To (REMOTE GIT REPOSITORY LOCATION)
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Então, depois de dar uma olhada, descobri a --force
opção. Então, forcei um push no repositório remoto git push --force origin master
, e ainda recebo um erro:
Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To (REMOTE GIT REPOSITORY LOCATION)
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)'
Não consigo fazer pull no master, porque contém código de desenvolvimento que não pode estar no master.
denyNonFastforwards = true
,. Mudei para falso, empurrei minhas alterações e depois mudei de volta para verdadeiro. Obrigado novamente a todos, pela ajuda.Respostas:
A mensagem significa que você não tem permissão para fazer push não acelerado.
Seu repositório remoto provavelmente está
denyNonFastforwards = true
em sua configuração. Se você mudar isso,git push --force
deve funcionar.Para alterar a configuração, você precisa acessar a máquina com o repositório remoto. A partir daí, faça
git config receive.denynonfastforwards false
.fonte
git config
para um servidor? Ou talvez você estivesse usando isso metaforicamente. Para brincar com essas idéias, criei um repositório de teste em/opt/git
(meu espaço do servidor git) e, em seguida, modifiquei essa configuração em/opt/git/the_repo/the_repo.git/config
. Mas uma vez feito ogit push --force origin SHA:branch
trabalho conforme necessário.O controle remoto não permite avanços não rápidos.
Sua melhor opção é fazer
git revert
todos os commits que não deveriam estar lá e ter mais cuidado no futuro.git revert [commit]
irá criar um novo commit que desfaz tudo[commit]
o que fez.fonte
Etapas para habilitar permanentemente force push no seguinte estilo
Edite o arquivo chamado "config" na pasta que termina em ".git" em seu repositório remoto
Na saída de linha de comando do git do push com falha, procure a linha que diz algo como:
então
Defina "denyNonFastforwards" como falso
Em "config", defina
Agora você pode enviar a partir de sua máquina local com -f
fonte
git revert
é meio complicado quando você tem mesclagens. Para ser mais complicado, meu caso tem 3 merge, dos quais um está com muito antigo ~ 20 commit divergente do desenvolvimento, o segundo é meio que merge do master - feio pra caralho.Tente usar o
-f
sinalizador e colocá-lo após o nome do branch remoto.git push origin master -f
fonte
git push -f origin master
e mesmo resultado. Nas duas vezes que tentei, recebi a segunda versão da mensagem de erro.Você não tem permissão para fazer git push que não seja um avanço rápido.
Se o remoto for o GitHub, vá até
https://github.com/$USER/$REPO/settings/branches
e cancele a proteção do branch em questão.Você precisa ser administrador do repo para fazer isso.
Se o remoto for seu próprio servidor git, execute
git config receive.denynonfastforwards false
-o.fonte
A melhor maneira de contornar isso é excluir o branch remoto e reenviá-lo:
fonte
O problema ocorre porque a ramificação atual não está configurada corretamente para o PULL . Primeiro verifique se o branch upstream está configurado corretamente para o pull usando -
git remote show origin
. Você pode encontrá-lo na seção - agências locais configurados para 'git pull': . Caso contrário, configure-o usando:Dê o nome de filial apropriado para o marcador de posição - MYBRANCH
fonte
Estou usando este grupo de comandos para redefinir meu repo remoto, isso irá reinicializar seu repo local e vincular novamente com seu repo remoto, em seguida, forçar o envio das atualizações.
Acho que essa maneira não vai funcionar no seu caso, mas pode ser útil para outra pessoa
vá para a pasta de origem e execute os comandos: observe que
https://github.com/*.git
é o seu link de repo remoto**Note: this will clear all your git history on your master branch**
fonte
Para mim, a dica de @svick apontou na direção certa. Como o servidor git que eu queria modificar é na verdade minha máquina, entrei nele e fiz um
git config --global receive.denynonfastforwards false
para alterar todos os repos para aceitar um push forçado não-ff. Não funcionou fora da caixa. O que descobri foi que na configuração lá já estavareceive.denynonfastforwards=true
definido e não podia ser apagado comgit config --global --unset receive.denynonfastforwards
. Fazer a edição no repo manualmente (vi config
) funcionou, no entanto.fonte
Resolvi removendo o branch master de protegido e também padrão, que é apenas sobre regras de branch protegido na configuração de um repositório.
fonte