Como eu ignoro um erro no ‘git pull’ sobre minhas alterações locais que seriam sobrescritas pela mesclagem?

Como ignoro a seguinte mensagem de erro no Git pull?

Suas alterações locais nos arquivos a seguir seriam sobrescritas por mesclagem

E se eu quiser sobrescrevê-los?

Eu tentei coisas como git pull -f , mas nada funciona.

Para ser claro, eu só quero replace alterações específicas, não tudo.

Se você quiser remover todas as alterações locais da sua cópia de trabalho, basta armazená-las:

 git stash save --keep-index 

Se você não precisar mais deles, agora pode soltar esse estoque:

 git stash drop 

Se você quiser replace apenas partes específicas de suas alterações locais, existem duas possibilidades:

  1. Confirme tudo o que você não deseja sobrescrever e use o método acima para o resto.
  2. Use git checkout path/to/file/to/revert para as mudanças que você deseja sobrescrever. Certifique-se de que o arquivo não está preparado por meio do git reset HEAD path/to/file/to/revert .

Tudo bem, com a ajuda das outras duas respostas, eu encontrei uma solução direta:

 git checkout HEAD^ file/to/overwrite git pull 

Isso funciona para mim para replace todas as alterações locais e não requer uma identidade:

 git reset --hard git pull 

Aqui está uma solução que elimina alterações em etapas:

 git reset file/to/overwrite git checkout file/to/overwrite 

Você pode confirmar suas alterações antes de fazer a mesclagem ou ocultá-las:

  1. git stash save
  2. git merge origin/master
  3. git stash pop

Minha solução para resolver esse problema foi:

 git checkout --  

Então eu poderia sobrescrever o arquivo usando apenas:

 git pull 

Se o seu repository contém alguns arquivos que são removidos do master :

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

No Git recente, você pode adicionar -r / --rebase no comando pull para rebase sua ramificação atual na parte superior da ramificação upstream após a busca. O aviso deve desaparecer, mas existe o risco de você obter alguns conflitos que precisará resolver.


Alternativamente, você pode verificar o ramo diferente com força, depois voltar ao master novamente, por exemplo:

 git checkout origin/master -f git checkout master -f 

Então puxe-o novamente como de costume:

 git pull origin master 

Usar este método pode poupar tempo de stashing ( git stash ) e potenciais problemas de permissão, resetando arquivos ( git reset HEAD --hard ), removendo arquivos ( git clean -fd ), etc. Também o acima é mais fácil de lembrar.

Esse problema é porque você fez alterações localmente no arquivo / s e o mesmo arquivo / s existe com mudanças no repository Git, então antes de puxar / empurrar você precisará de mudanças locais de stash:

Para sobrescrever alterações locais de um único arquivo:

 git reset file/to/overwrite git checkout file/to/overwrite 

Para sobrescrever todas as alterações locais (mudanças em todos os arquivos):

 git stash git pull git stash pop 

Além disso, esse problema pode estar ocorrendo porque você está em uma ramificação que não é mesclada com a ramificação principal.

Às vezes, nenhum desses trabalhos. Irritantemente, devido à coisa LF eu acho, o que vai funcionar é apagar os arquivos, depois puxar. 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 nem ser alteradas) serão substituídas e permitirão que você continue.

Use por sua conta e risco.

Você pode usar isso para sobrescrever arquivo

 git checkout file_to_overwrite 

Se você quer sobrescrever mudanças específicas, você precisa de uma maneira de dizer quais delas você quer esquecer.

Você pode tentar seletivamente esconder as mudanças que você deseja abandonar usando git stash --patch e, em seguida, soltando o stash com git stash drop . Você pode então extrair as mudanças remotas e mesclá-las normalmente.

A melhor maneira de resolver este problema é:

 git checkout --  

Depois disso, você pode sobrescrever o arquivo por:

 git pull origin master 

Eu tinha um caso especial disso: eu tinha um arquivo com – inalterável – nele. Era difícil de localizar, pois o comando do git status do git status não mostrava nenhuma alteração

Isso funcionou para eu descartar as alterações no servidor remoto ao vivo e retirar do GitHub de controle de origem:

 git reset --hard git pull origin master 

Se você quiser manter as mudanças de produção no servidor, basta mesclar em um novo item de configuração. O método de processamento é o seguinte:

 git stash git pull git stash pop 

Talvez você não execute todas as operações. Você pode saber o que você pode fazer a seguir.

Eu estava ignorando um arquivo no meu repository e quando eu fiz git pull upstream master eu tenho o seguinte erro:

erro: Suas alterações locais nos arquivos a seguir seriam sobrescritas por mesclagem: myfile.js Por favor, confirme suas alterações ou armazene-as antes de poder mesclar. Abortando

Para resolvê-lo eu fiz o seguinte

 git update-index --no-assume-unchanged myfile.js 

Eu então fiz o git status e recebi esta mensagem

No branch master Seu branch está atrás de ‘origin / master’ por 4 commits, e pode ser adiantado. (use “git pull” para atualizar sua filial local)

Mudanças não preparadas para commit: (use “git add …” para atualizar o que será confirmado) (use “git checkout – …” para descartar as mudanças no diretório de trabalho)

modificado: myfile.js

nenhuma alteração adicionada ao commit (use “git add” e / ou “git commit -a”)

Então eu fiz git checkout myfile.js seguido por git pull upstream master . Desta vez a operação git pull foi bem sucedida.

Aqui está minha estratégia para resolver o problema.

Declaração do problema

Precisamos fazer alterações em mais de 10 arquivos. Nós tentamos o PULL (git pull origin master) , mas o Git gritou:

erro: Suas alterações locais nos arquivos a seguir seriam sobrescritas por mesclagem: Por favor, confirme suas alterações ou armazene-as antes de mesclar.

Tentamos executar commit e depois pull , mas eles também não funcionaram.

Solução

Nós estávamos no palco sujo , na verdade, porque os arquivos estavam na “Área Staging”, também conhecida como “Área de Índice”, e alguns estavam na “Área de Cabeça”, também conhecida como “diretório Git local”. E nós queríamos puxar as mudanças do servidor.

Verifique este link para obter informações sobre os diferentes estágios do Git de maneira clara: Estágios do GIT

Nós 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 mudanças do servidor)
  • git stash apply (Aplicou todas as alterações da pilha)
  • git commit -m 'message' (confirmou as mudanças)
  • git push origin master (Empurrou as mudanças para o servidor)
  • git stash drop (Solte a pilha)

Vamos entender quando e porque você precisa de stashing

Se você estiver em estado sujo , significa que está fazendo alterações em seus arquivos e, por qualquer motivo, você é compelido a puxar ou trocar para outro ramo por algum trabalho muito urgente, portanto, nesse ponto, não é possível alterne até confirmar sua alteração. O comando stash está aqui como uma ajuda.

Do livro ProGIT , 2ª Edição:

Muitas vezes, quando você está trabalhando em parte do seu projeto, as coisas estão em um estado confuso e você quer mudar de ramificação um pouco para trabalhar em outra coisa. O problema é que você não quer fazer um commit de trabalho pela metade para poder voltar a esse ponto mais tarde. A resposta para este problema é o comando git stash. O stashing toma o estado sujo de seu diretório de trabalho – ou seja, seus arquivos rastreados modificados e alterações organizadas – e os salva em uma pilha de alterações inacabadas que você pode reaplicar a qualquer momento.

Eu encontrei isso ao puxar do mestre.

A maneira como eu lidei com o Visual Studio;

  1. Primeiro, executei a confirmação de desfazer na minha solução.
  2. Então eu fiz o processo de puxar do Git.

Espero que isto ajude!

git stash save --keep-index não funcionou para mim.

Abaixo comando funcionou como esperado.

 git reset --hard git pull 

Ele substitui todas as alterações locais, se você não precisar delas.

git reset --hard && git clean -df

Isso irá redefinir e excluir todos os arquivos não acompanhados.

Se esse erro é devido a terminações de linha,

 git add git checkout mybranch 

vai funcionar. Eu não tenho certeza porque isso funciona.

Para Pycharm, você pode fazer Git -> Reverter e depois puxar.

Esta mensagem também pode acontecer se o git-lfs for usado e um ponteiro de arquivo for sobrescrito por um arquivo real.

então você usa:

 git stash git lfs migrate import git pull 

saída completa do meu caso

 λ git stash Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master' Encountered 1 file(s) that should have been pointers, but weren't: public/apple-touch-icon.png λ git pull Updating 5a4ad44..b25f79d error: Your local changes to the following files would be overwritten by merge: public/apple-touch-icon.png Please commit your changes or stash them before you merge. Aborting λ git lfs migrate import migrate: Fetching remote refs: ..., done migrate: Sorting commits: ..., done migrate: Rewriting commits: 100% (0/0), done migrate: Updating refs: ..., done migrate: checkout: ..., done λ git pull Updating 5d4ad47..a25c79a Fast-forward public/apple-touch-icon.png | Bin 2092 -> 130 bytes public/favicon.ico | Bin 6518 -> 1150 bytes 2 files changed, 0 insertions(+), 0 deletions(-) 

veja https://github.com/git-lfs/git-lfs/issues/2839

Eu tentei e com êxito, antes de puxar, vamos confirmar todos os arquivos que você não tenha cometido, então você não receberá essas mensagens do AS.