Como ignoro a seguinte mensagem de erro no pull do Git?
Suas alterações locais nos arquivos a seguir seriam substituídas por mesclagem
E se eu quiser substituí-los?
Eu tentei coisas como git pull -f
, mas nada funciona.
Para ser claro, só quero substituir alterações específicas, não tudo.
git config core.fileMode false
salvar meus temposRespostas:
Se você deseja remover todas as alterações locais - incluindo arquivos que não são rastreados pelo git - da sua cópia de trabalho, basta ocultá-las:
Se você não precisar mais deles, agora poderá soltar esse esconderijo:
Se você não deseja ocultar as alterações que você já organizou - por exemplo, com
git add
-, adicione a opção--keep-index
. Observe, no entanto, que isso ainda impedirá a mesclagem se essas alterações realizadas colidirem com as do upstream.Se você deseja substituir apenas partes específicas de suas alterações locais, há duas possibilidades:
Confirme tudo o que você não deseja substituir e use o método acima para o resto.
Use
git checkout path/to/file/to/revert
para as alterações que você deseja substituir. Verifique se o arquivo não está preparado por meio degit reset HEAD path/to/file/to/revert
.fonte
git checkout HEAD^ path/to/file/to/revert
. Usar HEAD ^ fez toda a diferença.save --keep-index
".Tudo bem, com a ajuda das outras duas respostas, eu vim com uma solução direta:
fonte
Isso funciona para eu substituir todas as alterações locais e não requer uma identidade:
fonte
Aqui está uma solução que descarta as alterações faseadas:
fonte
Você pode confirmar suas alterações antes de fazer a mesclagem ou armazená-las:
git stash save
git merge origin/master
git stash pop
fonte
--autostash
opção está disponível apenas com a--rebase
opção (Se você deseja descartar as alterações locais em um arquivo, faça o seguinte:
Em seguida, você pode sobrescrever o (s) arquivo (s) com a versão mais recente executando:
fonte
git reset HEAD~
e, em seguida, fazer ogit checkout
git checkout -- <file>
falha comerror: pathspec '<file>' did not match any file(s) known to git.
Se o seu repositório contiver alguns arquivos removidos de
master
:git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
fonte
Às vezes, nada disso funciona. Irritantemente, devido à coisa de LF que penso, o que funcionará é excluir os arquivos e depois puxá - los. Não que eu recomende esta solução, mas se o arquivo não existir, o git não informará inutilmente que suas alterações (que podem até não ser alterações) serão substituídas e permitirão que você continue.
Use por sua conta e risco.
fonte
git stash save --keep-index
não funcionou para mim.O comando abaixo funcionou como esperado.
Ele substitui todas as alterações locais, se você não precisar delas.
fonte
Tantas respostas aqui que odeio acrescentar mais uma, mas todas as anteriores são mais desajeitadas do que precisam. Eu tenho que fazer isso o tempo todo, pois o Git parece confuso e diz que modifiquei os arquivos que não foram alterados (não podem ser revertidos porque não foram alterados, mas não é possível puxar porque supostamente foram alterados). O mais rápido que encontrei até agora é:
fonte
No Git recente, você pode adicionar
-r
/--rebase
nopull
comando para rebase sua ramificação atual no topo da ramificação upstream após a busca. O aviso deve desaparecer, mas existe o risco de você ter alguns conflitos que precisará resolver.Como alternativa, você pode fazer o checkout de um ramo diferente com força e voltar
master
novamente, por exemplo:Em seguida, puxe-o novamente como de costume:
O uso desse método pode poupar tempo a partir de stash (
git stash
) e possíveis problemas de permissão, redefinição de arquivos (git reset HEAD --hard
), remoção de arquivos (git clean -fd
), etc. Além disso, é fácil lembrar os itens acima.fonte
Esse problema ocorre porque você fez alterações localmente no (s) arquivo (s) e o mesmo arquivo (s) existe (s) com as alterações no repositório Git, portanto, antes de puxar / empurrar, você precisará ocultar as alterações locais:
Para substituir as alterações locais de um único arquivo:
Para substituir todas as alterações locais (alterações em todos os arquivos):
Além disso, esse problema pode ser devido a você estar em uma ramificação que não é mesclada com a ramificação principal.
fonte
git reset --hard && git clean -df
Cuidado : Isso redefinirá e excluirá os arquivos não rastreados.
fonte
Você pode usar isso para substituir o arquivo
fonte
A melhor maneira de resolver esse problema é:
Depois disso, você pode sobrescrever o arquivo:
fonte
git checkout -- path/*
apenas uma vez, e isso me permitiu executar o pull depois.Isso funcionou para eu descartar as alterações no servidor remoto ativo e extrair do GitHub de controle de origem:
fonte
Aqui está a minha estratégia para resolver o problema.
Declaração do Problema
Precisamos fazer alterações em mais de 10 arquivos. Tentamos
PULL (git pull origin master)
, mas Git gritou:Tentamos executar
commit
e depoispull
, mas eles também não funcionaram.Solução
Na verdade, estávamos no estágio sujo , porque os arquivos estavam na "Área de preparação", também conhecida como "Área de índice", e alguns estavam na "Área principal", também conhecida como "diretório local do Git". E queríamos extrair as alterações do servidor.
Verifique este link para obter informações sobre diferentes estágios do Git de maneira clara: Estágios do GIT
Seguimos os seguintes passos
git stash
(isso tornou nosso diretório de trabalho limpo. Suas alterações são armazenadas na pilha pelo Git).git pull origin master
(Puxe as alterações do servidor)git stash apply
(Aplicadas todas as alterações da pilha)git commit -m 'message'
(Confirmou as alterações)git push origin master
(Enviou as alterações para o servidor)git stash drop
(Largue a pilha)Vamos entender quando e por que você precisa esconder
Se você estiver no estado sujo , significa que está fazendo alterações em seus arquivos e, por qualquer motivo, é obrigado a puxar ou alternar para outra ramificação para algum trabalho muito urgente; portanto, neste momento, não é possível puxar ou alterne até confirmar sua alteração. O
stash
comando está aqui como uma mão amiga.Do livro ProGIT , 2ª Edição:
fonte
Se você deseja sobrescrever alterações específicas, precisa de uma maneira de dizer quais você deseja esquecer.
Você pode tentar ocultar seletivamente as alterações que deseja abandonar
git stash --patch
e, em seguida, descartá-lasgit stash drop
. Você pode então puxar as alterações remotas e mesclá-las normalmente.fonte
TL; DR;
Não sei por que isso ainda não foi respondido, mas a solução, como você pode ver, é simples. Todas as respostas aqui sugerem o mesmo: para excluir / salvar suas alterações locais e aplicar a montante, em seguida (se você
save
) aplicar as alterações locais na parte superior.O que
git pull --rebase --autostash
faz passo a passo:Meu caso (provavelmente o seu também):
Tenho alterações locais (alterações no diretório de trabalho):
Quando tento fazer alterações remotas, recebo um erro:
Essas alterações não se cruzam com as alterações locais:
Então, quando
pull --rebase --autostash
alterações locais são salvas e aplicadas sem nenhum problema automaticamenteAgora minhas alterações locais são um pouco menores:
fonte
Eu tive um caso especial disso: eu tinha um arquivo com --assume-inalterado nele. Foi difícil localizar, pois o
git status
comando não mostrava nenhuma alteraçãofonte
Se você deseja manter as alterações de produção no servidor, basta mesclar com um novo item de configuração. O método de processamento é o seguinte:
Talvez você não execute todas as operações. Você pode saber o que pode fazer a seguir.
fonte
Eu estava ignorando um arquivo no meu repositório e, quando o fiz
git pull upstream master
, recebi o seguinte erro:Para resolvê-lo, fiz o seguinte
Então eu fiz
git status
e recebi esta mensagemEntão eu
git checkout myfile.js
seguigit pull upstream master
. Dessa vez, a operação git pull foi bem-sucedida.fonte
Eu encontrei isso ao puxar do mestre.
A maneira como eu lidei com isso, usando o Visual Studio;
Espero que isto ajude!
fonte
A solução mais simples é:
fonte
Sou novo no git e não tenho certeza se minha solução é uma boa idéia.
Eu testei TODAS as respostas e nenhuma delas funcionou para mim!
Mas eu encontrei outra solução:
Espero que isto ajude.
fonte
O erro "Suas alterações locais nos arquivos a seguir seriam substituídos por mesclagem" ocorre porque você tem algumas alterações no repositório local que ainda não foram confirmadas, portanto, antes de sair do repositório remoto, apenas confirme as alterações no repositório local.
Digamos que seu repositório remoto remoto tenha alguma ramificação xyz e você deseja que essa ramificação de repositório remoto xyz seja mesclada (copiada para) na ramificação local de repositório xyz,
fonte
Se esse erro ocorrer devido a terminações de linha,
vai funcionar. Não sei ao certo por que isso funciona.
fonte
Para Pycharm, você pode executar Git -> Revert e, em seguida, puxar.
fonte
Essa mensagem também pode acontecer se
git-lfs
for usada e um ponteiro de arquivo foi substituído por um arquivo real.então você usa:
saída total do meu caso
consulte https://github.com/git-lfs/git-lfs/issues/2839
fonte
Eu tentei e com sucesso, antes de puxar, vamos confirmar todos os arquivos que você não confirmou, então você não receberá essas mensagens do AS.
fonte