Fiz algumas atualizações na minha máquina local, enviei-as para um repositório remoto e agora estou tentando fazer as alterações no servidor e recebo a mensagem;
erro: suas alterações locais nos seguintes arquivos seriam substituídas por mesclagem:
wp-content / w3tc-config / master.php
Confirme suas alterações ou esconda-as antes de mesclar.
Então eu corri,
git checkout -- wp-content/w3tc-config/master.php
e tentei novamente e recebo a mesma mensagem. Estou assumindo que w3tc
mudou alguma coisa no arquivo de configuração no servidor. Não me importo se a cópia local ou remota vai para o servidor (suponho que a remota seja a melhor), só quero mesclar o restante das minhas alterações (atualizações de plug-ins).
Alguma ideia?
Respostas:
Você não pode mesclar com modificações locais. O Git protege você de perder alterações potencialmente importantes.
Você tem três opções:
Confirme a alteração usando
Esconda-o.
O armazenamento em cache atua como uma pilha, onde você pode enviar as alterações e colocá-las na ordem inversa.
Para esconder, digite
Faça a mesclagem e, em seguida, puxe o esconderijo:
Descartar as alterações locais
usando
git reset --hard
ou
git checkout -t -f remote/branch
Ou: descartar alterações locais para um arquivo específico
usando
git checkout filename
fonte
git reset --hard
você também pode querer apagar arquivos untracked comgit clean -dfx
git stash
, não esconde arquivos para os quais não há histórico. Portanto, se você tiver arquivos que ainda não foram adicionados, mas que seriam substituídos ou "criados" pela mesclagem, a mesclagem ainda será bloqueada. Nessa situação, você também pode usargit stash -u
para esconder arquivos não confirmados. Ou você pode simplesmente excluí-los!git clean -dfx
era uma péssima ideia. Foram removidos alguns arquivos .gitignored que eu realmente precisava.git reset --hard
, ainda tinha alterações imersas!O primeiro comando armazena suas alterações temporariamente no stash e as remove do diretório de trabalho.
O segundo comando alterna ramificações.
O terceiro comando restaura as alterações que você armazenou no stash (a
--index
opção é útil para garantir que os arquivos temporários ainda estejam preparados).fonte
git stash pop
vez degit stash apply
. O primeiro remove-o do esconderijo enquanto o último ainda o mantém láVocê pode tentar um dos seguintes métodos:
rebase
Para alterações simples, tente rebaixá-lo enquanto puxa as alterações, por exemplo
Portanto, ele aplicará sua ramificação atual em cima da ramificação upstream após a busca.
Isto é equivalente a:
checkout master
,fetch
erebase origin/master
comandos do git.Verificação de saída
Se você não se importa com as alterações locais, pode mudar para outro ramo temporariamente (com força) e alterá-lo novamente, por exemplo
Redefinir
Se você não se importa com as alterações locais, tente redefini-lo para HEAD (estado original), por exemplo,
Se o exemplo acima não ajudar, pode haver regras no seu arquivo de normalização do git (
.gitattributes
), então é melhor confirmar o que diz. Ou o seu sistema de arquivos não suporta permissões, então você deve desativarfilemode
na sua configuração do git.Relacionado: Como forço o "git pull" para substituir arquivos locais?
fonte
git status
quais alterações você tem depois de guardar. Se nenhuma resposta ajudar, considere adicionar uma nova pergunta.Tente isto
e tente puxar novamente
fonte
git stash -u
, como comentado em stackoverflow.com/questions/15745045/…Portanto, a situação em que me deparei foi a seguinte:
exceto que, antes disso, era remoto: então, na verdade, isso:
O que estava acontecendo era (acho que não 100% positivo) que o gancho de recebimento de mensagens do git estava começando a rodar e estragar tudo devido a alterações de movimento no repositório do servidor remoto, o que, em teoria, não deveria ter sido tocado.
Então, o que acabei fazendo ao rastrear o gancho pós-recebimento e descobrir isso foi ter que ir ao repositório remoto no servidor e houve a alteração (que não estava no meu repositório local, que, de fato, disse que correspondia, não havia alterações, nada a confirmar, atualizado etc.) Assim, enquanto local, não houve alterações, no servidor, eu fiz um
git checkout -- some/file.ext
e então os repositórios locais e remotos realmente correspondiam e eu podia continue trabalhando e implante. Não tenho muita certeza de como essa situação ocorreu, embora algumas dúzias de desenvolvedores e mudanças de TI possam ter algo a ver com isso.fonte
AVISO: Isso excluirá arquivos não rastreados, portanto, não é uma ótima resposta para esta pergunta.
No meu caso, eu não queria manter os arquivos, então isso funcionou para mim:
Git 2.11 e mais recente:
Git mais antigo:
Referência: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x significa que arquivos ignorados também são removidos e arquivos desconhecidos pelo git.
-d significa remover diretórios não rastreados, além de arquivos não rastreados.
-f é necessário para forçá-lo a executar.
fonte
Para manter o registro dos seus arquivos recém-criados enquanto resolve esse problema:
Se você tiver criado arquivos recentemente , poderá criar um patch de alterações locais, obter mesclagens remotas e aplicar seu patch local após a conclusão da mesclagem remota, conforme definido passo a passo abaixo:
git add .
git diff --cached > mypatch.patch
git reset --hard
git pull
git apply mypatch.patch
O Git mesclará alterações e criará arquivos .rej para alterações que não são mescladas.
Conforme sugerido por Anu, se você tiver problemas para aplicar o patch, tente:
git apply --reject --whitespace=fix mypatch.patch
Esta resposta git: patch não aplica conversas em detalhes sobre esse problemaAproveite o seu trabalho contínuo em seu recurso e confirme as alterações locais quando terminar.
fonte
error: patch failed: yourfile.py:33 error: yourfile.py: patch does not apply
:, ainda tenho o mypatch.patch, mas não sei por que ele não está sendo aplicado e perdi minhas alterações !git apply --reject --whitespace=fix mypatch.patch
, recebi minhas alterações de volta ufa !!! [Graças a] ( stackoverflow.com/a/15375869/6484358 )Solicitando confirmação antes da recepção
Se necessário :
fonte
Para mim, só
git reset --hard
funcionou.O comprometimento não era uma opção, pois não havia nada a comprometer.
O esconderijo não era uma opção, porque não havia nada para esconder.
Parece que poderia ter sido de arquivos excluídos
.git/info/exclude
e tergit update-index --assume-unchanged <file>
editado alguns arquivos.fonte
No meu caso, fiz backup e excluí o arquivo sobre o qual o Git estava reclamando, confirmei e finalmente pude verificar outra ramificação.
Substituí o arquivo, copiei de volta no conteúdo e continuei como se nada tivesse acontecido.
fonte
Provavelmente, isso está sendo causado por problemas da CRLF.
Veja: Por que devo usar core.autocrlf = true no Git?
Use isso para puxar e forçar a atualização:
fonte
Tentei a primeira resposta:
git stash
com a pontuação mais alta, mas a mensagem de erro ainda era exibida, e encontrei este artigo para confirmar as alterações em vez de ocultar 'Relutant Commit'e a mensagem de erro desapareceu finalmente:
1:
git add .
2:
git commit -m "this is an additional commit"
3:
git checkout the-other-file-name
então funcionou. espero que esta resposta ajude. :)
fonte
Se você estiver usando Git Extensions , poderá encontrar suas alterações locais
Working directory
conforme mostrado abaixo:Se você não vir nenhuma alteração, provavelmente é porque você está em um submódulo errado. Portanto, verifique todos os itens com um ícone submarino, como mostrado abaixo:
Quando você encontrou alguma alteração não confirmada:
Selecione a linha com
Working directory
, navegar para Diff guia, clique direito em linhas com um lápis (ou+
ou-
ícone), escolha Redefinir para primeira cometer ou cometer ou esconderijo ou o que você quer fazer com ele.fonte
Para mim, isso funcionou:
git reset --hard
e depois
git pull origin <*current branch>
depois disso
git checkout <*branch>
fonte
Provavelmente
ajudaria
fonte