힘내 풀 : 오류 : 항목 foo가 업데이트되지 않았습니다. 병합 할 수 없습니다. 업데이트하고 “git

원격 지점에서 내 저장소를 업데이트하고 “git pull”을 수행 할 때이 오류가 계속 발생합니다. 로컬 변경 사항을 적용하지 않았으며 변경 사항이 있어도 유지할 필요가 없습니다.

난 노력 했어:

git reset --hard

그리고 같은 문제가 발생합니다

작동하는 것처럼 보이는 유일한 것은 문제가되는 파일을 삭제하고 git pull을 다시 시도하는 것입니다.

나는 또한 시도했다 git stasha로 다음 git pull. 안돼.

편집 : PortableGit-1.6.4-preview20090729를 사용하여 가짜 오류가있는 이전 버그를 수정해야합니다.



답변

이 문제를 해결하는 몇 가지 방법이 있지만 git stash가 나에게 잘 작동한다는 것을 알았습니다. 일시적으로 로컬 변경 사항을 다른 위치에 둡니다. 그런 다음 당겨서 최신 변경 사항을 가져올 수 있습니다. 그런 다음 로컬 변경 사항을 다시 가져올 수 있습니다.

다음과 같이 :

$ git pull
...
...
file your_file.rb not up to date, cannot merge.

$ git stash
$ git pull
$ git stash pop


답변

특정 파일을 무시하도록 색인을 업데이트하면 이러한 상황이 발생할 수 있습니다.

git update-index --assume-unchanged <file>

예를 들어 다른 지점을 확인하십시오.

git checkout <branch>
> error: Entry '<file>' not uptodate. Cannot merge.

인덱스 새로 고침을 강제하면 다음과 같은 문제가 해결됩니다.

git update-index --really-refresh
<file>: needs update

뒤에 :

git reset --hard

그리고 모든 것이 정상으로 돌아올 것입니다.


답변

이러한 종류의 문제는 대소 문자 만 다른 두 개의 파일 이름을 가진 저장소에서 가져 오려고 할 때 자주 발생합니다. FAT, NTFS는 대소 문자를 구분하지 않는 모드 (본질적으로 Windows에서 사용되는 경우) 또는 HFS +는 대소 문자를 구분하지 않고 두 개의 파일 “foobar”및 “FOOBAR”이있는 경우 Git은 서로 다른 두 개의 파일을 보게됩니다. 파일 시스템은 하나만 볼 수 있으므로 모든 종류의 문제가 발생합니다. Git은 “FOOBAR”이라고 말하고 체크 아웃 한 다음 “foobar”를 체크 아웃합니다. 파일 시스템은 “FOOBAR”의 내용을 단순히 교체하지만 그대로 두는 것으로 간주합니다. 이제 Git에서는 “FOOBAR”이 “foobar”의 내용으로 바뀌고 “foobar”가 사라진 것으로 보입니다.

이 기본적인 문제에는 두 가지 다른 표현이 있습니다. 하나는 저장소에 실제로 대소 문자 만 다른 두 개의 파일이 포함되어있는 경우입니다. 이 경우 대소 문자를 구분하는 파일 시스템에서 작업하거나 이러한 종류의 충돌이 발생하지 않도록 저장소를 편집해야합니다. 대소 문자를 구분하지 않는 파일 시스템은 단순히이 저장소의 내용을 저장할 수 없습니다.

해결할 수있는 다른 경우는 파일의 대소 문자를 변경하는 이름 바꾸기가 발생하는 경우입니다. 예를 들어 Git 저장소에 “EXAMPLE”에서 “example”로의 이름이 포함되어 있다고 가정합니다. Git은 새 버전을 확인하기 전에 디스크에있는 기존 파일을 덮어 쓰지 않는지 확인합니다. “example”이 새 파일 이름이라고 생각하기 때문에 파일 시스템에 존재하는지 묻고 파일 시스템은 “EXAMPLE”을보고 예라고 말하므로 Git은 새 버전을 덮어 쓸 것이라고 생각하므로 체크 아웃을 거부합니다. 추적되지 않은 파일. 이 경우 관심있는 로컬 변경 사항이없는 경우 간단한git reset --hard <revision-to-checkout>일반적으로 문제를 극복하고 새 개정판으로 이동하는 데 충분합니다. 대소 문자를 구분하지 않는 파일 시스템을 사용하는 경우에만 다른 이름으로 파일 이름을 바꾸지 마십시오. 이렇게하면 이와 같은 문제가 발생할 수 있습니다.


답변

@Brian Campbell의 게시물에 대해 더 자세히 설명하기 위해 (하드 리셋도 작동하지 않았기 때문에) 저를 막는 엣지 케이스를 지적하고 싶습니다.

파일 OldFile을 다른 폴더 로 옮기고 이름을 변경했습니다 NewFile. 그런 다음 파일을 assume-unchanged.

이로 인해 분기를 전환 할 수 없었고 저장하거나 푸시 할 은닉처도 없었습니다. 문제는 assume-unchanged플래그 를 설정하기 전에이 파일 변경을 새 이름으로 커밋하지 않았다는 것 입니다. 그래서 다시로 설정하고 no-assume-unchanged커밋 한 다음로 다시 설정하고 assume-unchanged분기를 다시 전환 할 수 있습니다.


답변

일반적으로 이것은 로컬 저장소에 커밋되지 않은 로컬 파일에 변경 사항이 있음을 의미합니다. 좀 더 자세한 내용 은이 stackoverflow 질문 을 볼 수도 있습니다 .


답변

비슷한 문제가 발생했습니다 (Windows 10). branchA계속해서 master. 그래서 처음 엔 몇 가지 미트되지 않은 변경 한 git stash다음 git checkout -f master그러나 나는 아직도있어 Entry 'fileName' not uptodate. Cannot merge.

git status 커밋 할 것이 아무것도 보이지 않았습니다.

결국 수동으로 파일을 제거하고 다른 브랜치 (물론 내 파일을 다시 가져옴)로 이동할 수 있었으므로 git 어딘가에 버그가있는 것 같습니다.


답변

파일 권한에도 문제가있을 수 있습니다. config에서 달리 언급하지 않는 한 Git도 버전을 관리합니다. 비슷한 문제가 거의없는 사람들을 위해이 대답을 추가하십시오.