Obtendo um erro fatal no git para várias entradas de estágio

241

Usando o Git versão 2.2.0 com o Unity Game Engine no OS X, e queria confirmar meu código. Adicionei tudo e não recebi uma mensagem de erro. depois confirme -m e receba esta mensagem de erro:

fatal: multiple stage entries for merged file 'Assets/Prefabs/Resources'

Não percebendo, eu enviei, que não deu uma mensagem de erro, na verdade disse: Everything up-to-date Então eu verifiquei o bitbucket (onde o repositório é realizado) e ele não mostrou meu commit. então verifiquei meu log local e isso também não mostra meu commit.

Eu procurei no google por uma resposta ... e nada. qual é esse erro? e como posso corrigir isso?

Daniel Toebe
fonte
Qual versão do git, ou ferramenta você está usando? Houve um tópico recente na lista de desenvolvedores sobre como melhorar a verificação de várias entradas de estágio. news.gmane.org/gmane.comp.version-control.git
Philip Oakley
Parece provável que a verificação extra no 2.2.0 possa estar envolvida. "Garanta que as entradas não removidas sejam removidas" 12 de agosto de Jaime Soriano Pastor, pode ser um tópico para começar.
Philip Oakley
4
Então porque isso acontece?
Charlie Parker
basta fazer uma edição fictícia no arquivo mencionado e 'confirmar e sincronizar'.
sajanyamaha
Nota: veja também stackoverflow.com/a/51919644/6309
VonC 19/08/1918

Respostas:

381

A primeira solução, que parece funcionar com versões recentes do Git (2.3 +, Q2 + 2015) é mencionado na concessão de mais up-to-date resposta :

  1. Excluir o índice

    $ rm .git/index
    
  2. Adicionar todos

    $ git add -A
    
  3. Confirmar

    $ git commit -a
    

Resposta original (final de 2014)
A solução usual é:

  • clonar novamente o repositório remoto em um novo repositório local
  • adicione as alterações do primeiro repositório para o segundo:

    $ cd /patH/to/second/cloned/repo
    $ git --work-tree=/path/to/first/repo add .
    

Você pode ver esta mensagem de erro em read-cache.c, discutida neste patch (" read-cache.c: Garanta que entradas não mescladas sejam removidas ") e introduzida no commit do Git 2.2 .
Uma vez que este é tão recente, é possível que a desclassificação Git para 2,1 seria suficiente para não ser afetado por esse patch.

O OP Daniel Toebe acrescenta nos comentários :

O problema aconteceu no meu macbook, que decidiu falhar em mim, e outro acidente de computador me deixou muito atrasado em meus projetos.

VonC
fonte
@sharpner, é possível que seja um bug ou um efeito colateral desse patch no seu caso.
VonC
1
Desculpe a resposta atrasada ... O problema aconteceu no meu macbook, que decidiu falhar em mim, e outro acidente de computador me deixou muito atrasado em meus projetos.
Daniel Toebe
1
@DanielToebe good feedback. Eu o incluí na resposta para obter mais visibilidade.
VonC
Acabei de encontrar o mesmo, depois de uma tentativa degit commit -c sha
Chris Leishman
2
Para qualquer interessado, isso aconteceu comigo porque eu estava editando acidentalmente um arquivo na minha pasta .git em vez do próprio arquivo.
Ostler.c 29/01
166

Acredito que encontrei esse problema porque adicionei e confirmei alterações e excluí um arquivo que havia acabado de confirmar. Se isso parecer semelhante ao seu caso, recomendo seguir o abaixo para salvar a re-clonagem e adicionar manualmente suas alterações.

Consegui corrigir esse problema excluindo o arquivo .git / index no meu repositório, semelhante ao que o @slider sugeriu (acredito que ele digitou errado o caminho).

rm .git/index

Então eu tive que adicionar e confirmar minhas alterações locais novamente

git add -A
git commit -m "..."

Eu era capaz de empurrar remotamente.

O que é o índice git e como é relevante?

Qual é o problema do índice Git?

O "índice" do git é onde você coloca os arquivos que deseja confirmar no repositório git.

Antes de “confirmar” (fazer check-in) os arquivos no repositório git, você precisa primeiro colocar os arquivos no “index” git.

Acredito que, ao excluir este arquivo, o git irá indexar novamente novamente o repo, criar um novo e você estará pronto. Ele resolve esse problema porque o repositório local é re-indexado sem o arquivo que eu excluí que causou todo o barulho.

Edit: Parece que isso está relacionado ao Mac (com base nos comentários), por isso, se ajudar, eu estou no OSX 10.10 e na versão 2.3.4 do git instalada através do brew.

conceder
fonte
1
Sim, isso funcionou e obrigado pela explicação. Uma ressalva aqui é antes de você fazer isso para esconder, mover ou excluir qualquer arquivo que você não tenha adicionado à lista de alterações padrão atual. Eles serão sugados de volta com ogit add -A
Kirby
4
Confirme isso no Mac OS X Yosemite. Aconteceu enquanto trabalhava no Android Studio, se não houvesse cenário reproduzível específica ..
de Drew
4
Essa deve ser a resposta correta, pois funciona e tem uma explicação melhor. Isso também aconteceu comigo também.
Jared Burrows
1
Trabalhou para mim também. A adição da raiz do controle de versão no IntelliJ funcionou, mas a correção do índice git funcionou bem. Obrigado pela explicação @grant.
Andrew Eells 14/05
1
Eu também tive esse problema quando o IntelliJ estava sendo executado em segundo plano enquanto fazia algumas modificações com o vim. Eu acho que havia uma condição de corrida git. (Na verdade, acho que existem muitos deles.) Fechar o IntelliJ, remover o índice e re-confirmar meu trabalho funcionou perfeitamente.
Robert Fischer
119

Para o projeto

rm .git/index
git reset

depois de excluir o índice, você precisa recriá-lo com git reset

Para submódulo:

Vá para a pasta principal do projeto

rm .git/modules/your_project_structure/index
git reset --hard HEAD
farincz
fonte
4
O git reset após a remoção do índice o acertou totalmente. Obrigado! Se você não redefinir todos os arquivos serão novos no índice, será necessário adicionar. A redefinição reconstruirá o índice que parece. Mesmo que eu não entenda como o git pode reconstruir o índice, sem um índice?
JosFabre 8/09/2015
1
@ JosFaber Porque o índice não é histórico de confirmação. Na verdade, é uma estrutura auxiliar "redundante". Consulte schacon.github.io/gitbook/7_the_git_index.html Para que possa ser completamente reconstruído comparando a árvore de trabalho e o HEAD. E é exatamente isso que o git reset faz. Página homem diz: ... cópia redefinir as entradas de <tree-ish> para o índice ...
farincz
2
Obrigado! Sem o git reset, ele queria que eu adicionasse novamente todos os arquivos já existentes no repositório.
Robert Bernstein
1
Eu uso o sourcetree no meu mac. Excluí manualmente o .git / index e, em seguida, selecionei o último commit válido, cliquei com o botão direito do mouse e selecionei reset master (no meu caso) para este comentário - depois escolhi a opção mista que deixa meu trabalho em bom estado. Consegui, então, confirmar meu trabalho atual e tudo está saudável agora.
precisa saber é o seguinte
1
A maneira mais limpa e rápida!
H4rd4r7c0r3
29

Você pode remover o arquivo de índice Git do seu projeto. Na raiz do seu projeto, execute o seguinte comando:

rm .git/index

Depois disso, funciona.

controle deslizante
fonte
3
Isso não responde à pergunta. Por favor, especifique esta resposta com mais detalhes.
ArtOfCode 06/03
Não funcionou para mim rm: /.git/index: No such file or directoryMac OSX Yosemite; git 2.3.4 instalado através do homebrew
conceda
@ grand Você tem que remover a barra no início. ( rm .git/indexno seu diretório git).
ChristophLSA
2
@ChristophLSA obrigado - respondi com uma descrição do que essa ação faz para fornecer clareza. Esta resposta pode ser atualizada para refletir o caminho adequado e informar aos usuários o que a ação faz?
conceder
1
Eu sei porque isso funciona. O problema é causado por um índice corrompido. Eu encontrei esse problema quando corrompi o índice modificando o código no IntelliJ enquanto escrevia uma mensagem de confirmação na linha de comando. A exclusão do índice não destrói suas alterações, simplesmente as desinstala.
Pyrolistical
3

Eu tento uma solução diferente e funciona para mim. Abaixo estão minhas opções

#cd .git
#rm index
#cd ..
#git add .
wqycsu
fonte
como o @farincz disse, é necessário recriar o índice novamente chamando, git resetcaso contrário, ele fornece fatal: Could not reset index file to revision 'HEAD' .
kuskmen
1

Se isso acontecer em um submódulo

O arquivo de índice está localizado dentro do .gitdiretório pai :

.git/modules/your_project_structure/index

Em um submódulo, não há diretórios nomeados .git(pelo menos no projeto em que estou trabalhando), há apenas um .gitarquivo que informa (e o git) onde procurar o diretório git desse projeto.

O status Git mostra alterações que eu não fiz

Depois de remover os arquivos de índice e fazer um git reset, me vi enfrentando muitas alterações inexplicáveis ​​e uma redefinição física não estava ajudando.

Como você perderá todas as alterações, confirme-as e pressione antes de continuar.

O índice parecia corrompido, então eu o removi com os seguintes comandos.

git rm -rf --cached .
git reset --hard HEAD
Emile Bergeron
fonte
0

Acabei de receber este erro com o Github Desktop Client (OSX). Tudo o que fiz foi sair do aplicativo e reabri-lo e ele começou a funcionar.

Oren
fonte