O que significa quando o git diz que um arquivo "precisa ser atualizado"?

156

Na minha vida, não consigo encontrar uma explicação decente da mensagem "[arquivo]: precisa ser atualizada" que o git às vezes sai de vez em quando. Até o FAQ oficial do git explica isso marcado como um TODO. Se alguém pudesse explicar A) o que isso significa; e B) como consertar, eu ficaria extremamente grato.

rofrankel
fonte
1
Boa pergunta, como você disse sequer o GitFaq não tenho uma resposta: git.wiki.kernel.org/index.php/...
Justin Ethier
1
Você pode dizer exatamente qual comando produz isso? E qual versão do Git? Eu tentei removê-los da interface do usuário, portanto, o Git recente não deveria lhe contar isso, exceto nos lugares que esqueci ;-).
Matthieu Moy

Respostas:

108

Isso significa que você está tentando mesclar alterações de algum lugar, mas as alterações incluem modificações em um arquivo que está sujo (atualmente modificado na sua árvore de trabalho). Você precisa confirmar suas alterações pendentes ou ocultá-las, puxar / rebase / mesclar / o que estiver fazendo para atualizar e descompactar

Michael Mrozek
fonte
4
Na verdade, não é a atração - é a mesclagem que faz parte da atração. Você verá o mesmo erro se tentar mesclar uma filial local com o mesmo problema, e acho que outras operações de mesclagem (aplicar, aplicar stash ...) imprimem erros semelhantes, se não o mesmo.
Cascabel
Ah obrigada. Isso realmente faz sentido. Acho que preciso confirmar as alterações antes de fazer o checkout de uma ramificação diferente.
Rofrankel #
7
Caso ajude nos resultados da pesquisa, também encontrei esse problema ao tentar fazer uma git svn rebasecópia de trabalho suja. Stash save, rebase, stash pop, e tudo estava bem com o mundo.
Adam Tuttle
1
O arquivo em si não pode ser alterado - mesmo a alteração dos atributos do arquivo (como permissões) pode causar isso.
chiborg
22

Como outros já apontaram, a mensagem de atualização de necessidade significa que o arquivo está sujo ou, em outras palavras, desatualizado. Mas, em vez de redefinir e começar tudo de novo, o que pode ser feito é simples git statuse, git add <file> se estiver na lista alterada . Porque você já pode adicionar o arquivo antes, mas depois o alterou. Isso aconteceu comigo e, com isso simples add, resolvi o problema.

lomza
fonte
7

Faça logon no servidor de produção / destino, cdno diretório que contém seu aplicativo e execute esses dois comandos.

1. Redefina para a versão mais recente

AVISO, isso excluirá todas as suas alterações:

git reset --hard HEAD

2. Puxe as alterações

git pull origin master

NXT
fonte
1
[git reset --hard HEAD] funcionou para mim. Eu havia confirmado a partir de uma unidade de compartilhamento do Windows, mas meu diretório Ubuntu não refletia a confirmação que acabei de fazer, mesmo que fosse a mesma pasta (Z: mapeado para / var / www / html /). Depois de executar isso, [git status] e [git pull] agora mostram que está atualizado.
Keith DC
Esta é a solução que funcionou para mim também. Tentei usar a subárvore git usando o SourceTree no Windows e ele estragou muito o processo.
Artem Russakovskii
3

Como diz a resposta à outra pergunta vinculada, a mensagem significa simplesmente que você tem alterações pendentes. Você também obtém isso, por exemplo, se realizar algumas mudanças git add, mudar de idéia e agir git reset HEAD filecom a intenção de começar de novo.

triplo
fonte
2
git reset HEAD filefaz com que a mesma mensagem apareça
especialista
2

Este erro pode ocorrer quando o processo de rebase faz alterações adicionais nos arquivos que não estão na ramificação de destino.

Para mim, a parte complicada foi com o .gitattributesarquivo no meu repositório. Um novo tipo de arquivo binário foi adicionado em outra ramificação, mas sua manipulação foi forçada como arquivo de texto. Quando o arquivo foi baixado do repositório pelo git, os EOLs (na verdade, são bytes de valor binário) foram substituídos - resultando em diferença binária.

Adicionar uma nova entrada para lidar com o novo tipo de arquivo como binário e tentar novamente todo o processo resolveu o problema para mim.

procuração
fonte
1

No meu caso, eu continuava recebendo

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Eu tinha esses arquivos no meu diretório, mas eles foram renomeados no meu ramo atual. Então, para corrigir, eu corri

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

e isso me permitiu continuar

ThinkDigital
fonte