여러 단계 항목에 대한 자식에서 치명적인 오류가 발생합니다.


241

OS X에서 Unity 게임 엔진과 함께 Git 버전 2.2.0을 사용하고 내 코드를 커밋하려고했습니다. 모든 것을 추가했지만 오류 메시지가 표시되지 않았습니다. 그런 다음 -m 커밋 하고이 오류 메시지가 나타납니다.

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

그것을 보지 못했지만 오류 메시지가 표시되지 않았습니다. 실제로 Everything up-to-date 비트 버킷 (리포지토리가있는 곳)을 확인했는데 커밋을 표시하지 않았습니다. 그래서 로컬 로그를 확인했는데 커밋도 표시되지 않습니다.

나는 답을 찾기 위해 구글을 보았지만 아무것도 없다. 이 오류는 무엇입니까? 어떻게 고칠 수 있습니까?


어떤 버전의 자식 또는 도구를 사용하고 있습니까? 여러 단계 항목에 대한 검사 개선에 대한 최근 스레드 목록이 개발자 목록에 있습니다. news.gmane.org/gmane.comp.version-control.git
Philip Oakley

2.2.0에서 추가 검사가 필요할 수 있습니다. Jaime Soriano Pastor가 8 월 12 일에 "병합되지 않은 항목을 제거했는지 확인하십시오."
Philip Oakley

4
왜 이런 일이 발생합니까?
Charlie Parker

해당 파일을 더미 편집하고 'commit and sync'하십시오.
sajanyamaha

답변:


381

최신 버전의 Git (2.3+, 2015 년 2 분기)에서 작동하는 첫 번째 해결 방법은 grant최신 답변에 언급되어 있습니다 .

  1. 색인 삭제

    $ rm .git/index
    
  2. 모두 추가

    $ git add -A
    
  3. 범하다

    $ git commit -a
    

원래 답변 (2014 년 말)
일반적인 해결 방법은 다음과 같습니다.

  • 원격 저장소를 새로운 로컬 저장소로 다시 복제하십시오.
  • 첫 번째 저장소에서 두 번째 저장소로 변경 사항을 추가하십시오.

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

read-cache.c이 패치에서 설명 된 이 오류 메시지를 볼 수 있습니다 ( " read-cache.c: 병합되지 않은 항목이 제거되었는지 확인). ")에서 설명하고 Git 2.2 커밋에 도입 된 .
이것이 최신이므로 Git을 2.1로 다운 그레이드 하면 해당 패치의 영향을받지 않을 수 있습니다.

그만큼 OP 다니엘 Toebe는 추가 의견에 :

이 문제는 내 맥북에서 발생하여 실패했으며 다른 컴퓨터로 인해 프로젝트가 실패했습니다.


@sharpner 귀하의 경우 버그 또는 해당 패치의 부작용 일 수 있습니다.
VonC

1
지연된 답변에 대해 죄송합니다 ...이 문제는 Macbook에서 발생하여 실패했습니다. 다른 컴퓨터로 인해 프로젝트가 잘못 진행될 수 있습니다.
Daniel Toebe 2014

1
@DanielToebe 좋은 피드백. 더 많은 가시성을 위해 답변에 포함 시켰습니다.
VonC

난 그냥 시도 후, 동일로 실행git commit -c sha
크리스 Leishman

2
관심이 있으시면 실수로 파일 자체 대신 .git 폴더에서 파일을 편집했기 때문에 이런 일이 일어났습니다.
ostler.c

166

변경 사항을 추가하고 커밋 한 다음 방금 커밋 한 파일을 삭제했기 때문에이 문제가 발생했다고 생각합니다. 이것이 귀하의 경우와 비슷하게 들리면 아래의 내용을 따라 다시 복제를 저장하고 변경 사항을 수동으로 추가하는 것이 좋습니다.

@slider가 제안한 것과 비슷한 내 저장소에서 .git / index 파일을 삭제 하여이 문제를 해결할 수있었습니다 (경로를 잘못 입력했다고 생각합니다).

rm .git/index

그런 다음 로컬 변경 사항을 다시 추가하고 커밋해야했습니다.

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

그런 다음 원격으로 푸시 할 수있었습니다.

자식 인덱스는 무엇이며 어떻게 관련이 있습니까?

Git 지수와의 거래는 무엇입니까?

git“index”는 git 저장소에 커밋하려는 파일을 저장하는 위치입니다.

git 저장소에 파일을“커밋”(체크인)하기 전에 먼저 파일을 git“index”에 배치해야합니다.

나는이 파일을 삭제하면 git이 repo를 다시 색인화하고 새로운 파일을 생성 할 것이라고 생각합니다. 로컬 저장소가 삭제 된 파일없이 다시 색인되어 모든 소란을 유발했기 때문에이 문제를 해결합니다.

편집 : 이것은 Mac과 관련이있는 것 같습니다 (댓글을 기준으로) OSX 10.10 및 git 버전 2.3.4를 사용하는 경우 brew를 통해 설치됩니다.


1
예, 이것은 효과가 있었고 설명에 감사드립니다. 여기서주의 할 사항은 현재 기본 변경 목록을 추가하지 않은 파일을 숨기거나 이동하거나 삭제하는 것입니다. 그들은 함께 다시 흡입됩니다git add -A
커비

4
Mac OS X Yosemite에서이를 확인하십시오. 재현 가능한 특정 시나리오가 없었지만 Android Studio에서 작업하는 동안 일어났습니다 ..
Drew

4
이것이 작동하고 더 나은 설명이 있기 때문에 정답이어야합니다. 이것은 나에게도 일어났다.
Jared Burrows

1
나도 일했다. IntelliJ에 버전 제어 루트를 추가하면 문제가 발생했지만 git 인덱스를 작성하는 것은 잘 작동했습니다. @grant 설명에 감사드립니다.
Andrew Eells

1
vim으로 수정하는 동안 IntelliJ가 백그라운드에서 실행 중일 때도이 문제가 발생했습니다. 에 경쟁 조건이 있다고 생각 git합니다. (실제로, 나는 그것들이 많이 있다고 생각합니다.) IntelliJ를 닫고 인덱스를 제거하고 내 작업을 다시 커밋하는 것은 잘 작동했습니다.
Robert Fischer

119

프로젝트

rm .git/index
git reset

인덱스를 삭제 한 후 git reset으로 인덱스를 다시 만들어야합니다.

하위 모듈의 경우 :

메인 프로젝트 폴더로 이동

rm .git/modules/your_project_structure/index
git reset --hard HEAD

4
인덱스를 제거한 후 git reset은 완전히 못 박았습니다. 감사! 재설정하지 않으면 모든 파일이 색인에 새로 추가되므로 추가해야합니다. 재설정하면 해당 색인이 다시 작성됩니다. git이 인덱스없이 인덱스를 다시 작성하는 방법을 이해하지 못합니까?
JosFabre

1
@JosFaber 인덱스가 커밋 히스토리가 아니기 때문에. 실제로 "중복"도우미 구조입니다. schacon.github.io/gitbook/7_the_git_index.html을 참조 하여 작업 트리와 HEAD를 비교하여 완전히 재구성 할 수 있습니다. 그리고 그것이 바로 git reset이하는 일입니다. 매뉴얼 페이지의 말 : ... <tree-ish>에서 인덱스로 복사 항목 재설정 ...
farincz

2
감사합니다! git reset없이 저장소에 이미있는 모든 파일을 다시 추가하고 싶었습니다.
Robert Bernstein

1
Mac에서 sourcetree를 사용합니다. .git / index를 수동으로 삭제 한 다음 마지막 커밋을 선택하고 마우스 오른쪽 버튼을 클릭 한 다음이 마스터로 재설정 마스터를 선택했습니다-혼합 옵션을 선택하여 내 작업을 좋은 상태로 둡니다. 나는 현재의 일을 할 수 있었고 모든 것이 건강해졌습니다.
user216661

1
가장 깨끗하고 빠른 방법!
h4rd4r7c0r3

29

프로젝트에서 Git 인덱스 파일을 제거 할 수 있습니다. 프로젝트의 루트에서 다음 명령을 실행하십시오.

rm .git/index

그 자식 후 작동합니다.


3
이것은 질문에 대답하지 않습니다. 자세한 내용은이 답변을 참고하십시오.
ArtOfCode

rm: /.git/index: No such file or directoryMac OSX Yosemite에서 작동하지 않았습니다 . Homebrew를 통해 설치된 git 2.3.4
부여

@grant 처음에 슬래시를 제거해야합니다. ( rm .git/indexgit 디렉토리에 있음).
ChristophLSA

2
@ChristophLSA thank you-명확성을 제공하기 위해이 작업이 수행하는 작업에 대한 설명으로 답변했습니다. 이 답변을 업데이트하여 올바른 경로를 반영하고 사용자에게 조치가 무엇인지 알려줄 수 있습니까?
부여

1
왜 이것이 효과가 있는지 알고 있습니다. 인덱스가 손상되어 문제가 발생합니다. 명령 줄에 커밋 메시지를 작성하는 동안 IntelliJ에서 코드를 수정하여 인덱스를 손상 시켰을 때이 문제가 발생했습니다. 인덱스를 삭제해도 변경 내용이 손상되지 않고 단순히 스테이지가 해제됩니다.
Pyrolistical

3

나는 다른 해결책을 시도하고 그것은 나를 위해 작동합니다. 아래는 내 옵션입니다

#cd .git
#rm index
#cd ..
#git add .

@farincz가 말했듯이, git reset그렇지 않으면 호출하여 인덱스를 다시 작성해야 합니다 fatal: Could not reset index file to revision 'HEAD' .
kuskmen

1

이것이 서브 모듈에서 발생하는 경우

색인 파일은 상위 .git디렉토리 내에 있습니다 .

.git/modules/your_project_structure/index

하위 모듈에는 .git(적어도 작업중 인 프로젝트 에는) 이름이 지정된 디렉토리가 없으며 단지.git 의 git 디렉토리를 찾을 위치를 알려주 파일 있습니다.

힘내 상태는 내가하지 않은 변경 사항을 보여줍니다

인덱스 파일을 제거하고을 수행 한 후 git reset설명 할 수없는 많은 변경에 직면했으며 하드 리셋이 도움이되지 않았습니다.

경고 모든 변경 사항이 손실되므로 커밋하고 계속하기 전에 푸시하십시오.

색인이 손상된 것 같으므로 다음 명령으로 제거했습니다.

git rm -rf --cached .
git reset --hard HEAD

0

방금 Github Desktop Client (OSX) 에서이 오류가 발생했습니다. 내가 한 일은 앱을 종료하고 다시 열면 작동하기 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.