Visual Studio 프로젝트를 위해 Windows 7에서 gitExtensions를 사용하여 Git 리포지토리를 엽니다. 갑자기 비어 있습니다. 저장소는 존재하지만 모든 커밋이 사라졌습니다.
나는 그래픽 인터페이스를 사용하고 있으며 업데이트 이후 처음으로 열어본 것 같습니다.
커밋을 되돌리려면 어떻게 해야 할지 잘 모르겠습니다.
내가 입력할 때
git log
나는 받는다
치명적: 잘못된 기본 개정 'HEAD'
업데이트
살펴본 후https://stackoverflow.com/questions/1545407/recovering-broken-git-repository나는 노력했다
자식 fsck
그것은 다음과 같이 반환되었습니다:
오류: 잘못된 HEAD
치명적: 느슨한 개체 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31(.git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31에 저장됨)이 손상되었습니다.
반품 커밋:
오류: 참조 HEAD를 확인할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
치명적: HEAD 참조를 잠글 수 없습니다.
마스터 브랜치 반환 로깅
$ git log master 경고: 손상된 참조 참조/헤드/마스터를 무시합니다. 경고: 손상된 참조 참조/헤드/마스터를 무시합니다. 치명적: 모호한 인수 'master': 작업 트리에 알 수 없는 개정 또는 경로가 없습니다. 버전과 경로를 구분하려면 '--'를 사용하세요.
관련성이 있을 수 있는 내용을 계속 붙여넣겠습니다.
$ git reflog master
경고: 손상된 참조 참조/헤드/마스터를 무시합니다.
경고: 손상된 참조 참조/헤드/마스터를 무시합니다.
치명적: 모호한 인수 'master': 작업 트리에 알 수 없는 개정 또는 경로가 없습니다.
버전과 경로를 구분하려면 '--'를 사용하세요.
더 유용한 정보: 손상된 파일을 삭제할 때마다 다른 파일이 그 자리를 차지합니다. 나는 그것이 잘못된 것이나 무언가를 가리키는 마스터 브랜치와 관련이 있다고 생각하기 시작했습니다. 머리가 마스터를 가리키고 있다고 가정하기 때문입니다.
하루 후:
그래서 친구에게 이 문제를 알려 줬는데, 그는 로그를 검토할 수 있었고 로그의 해시가 폴더의 개체와 일치하지 않는다고 말했습니다. 그는 마스터 브랜치를 로그 등으로 재설정하려고 시도했지만 약간 헤매었습니다. 도움이 되었기를 바랍니다
답변1
저장소는 존재하지만 모든 커밋이 사라졌습니다.
정확히 무슨 뜻인가요? 작업 트리가 아직 거기에 있나요? 존재 합니까 .git/
? 그 안에 파일이 있나요?
게시한 메시지를 보면 해당 파일이 .git/HEAD
존재하지 않는다고 나와 있습니다. 이는 작업 트리(체크아웃한 내용)의 예상 상태를 정의합니다. 해당 파일이 사라지면 git은 사용자가 어디에 있는지 알 수 없습니다.
다음 내용으로 파일을 직접 만들어 볼 수 있습니다.
ref: refs/heads/master
다른 지점에 있었다면 "master"를 지점 이름으로 바꾸세요. 지점에 있지 않다면 더 복잡해질 것입니다.
.git/logs/HEAD
HEAD의 과거 상태를 기록하고 맨 아래 행을 기록합니다. 이 예제 라인은 결제를 보여줍니다.
25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch
앞의 SHA1은 커밋을 나타냅니다. 예를 들어 분기 로그에서 이러한 항목을 찾을 수 있어야 합니다 .git/logs/refs/heads/master
.
귀하가 제공한 git reflog 출력도 refs/heads/master
누락된 것 같습니다. 유일한 콘텐츠는 최신 커밋의 SHA1(및 개행 문자)로 간주됩니다. 예를 들어 분기 로그 끝에서 최신 SHA1을 찾을 수 있습니다 .git/logs/refs/heads/master
.
답변2
.git/HEAD가 존재하고 그 내용이 ref: refs/heads/master
refs/heads/master 파일을 확인하는 경우 마지막 커밋의 sha1이 포함되어 있어야 합니다.
해당 파일이 손상되어 NULL 문자로 가득 찬 경우 해당 파일을 편집하고 마지막 .git/logs/HEAD
커밋 이전 커밋의 sha1을 넣습니다.
그럼 해git reset --hard 'sha1 of the commit that you selected'
답변3
저장소가 손상된 것 같습니다. 가장 쉬운 방법은 백업에서 저장소를 복구하거나 원본 소스에서 저장소를 다시 복제하는 것입니다(저장소에 많은 작업이 없다고 가정).
복원/복제가 옵션이 아닌 경우 다음 내용을 읽어 보는 것이 좋습니다.프로 Git(무료 온라인 도서 또는종이 버전). 책 전체는 매우 유익하지만 특히 Git이 내부적으로 어떻게 작동하는지 이해하려면 마지막 장을 살펴보십시오. Git의 작동 방식을 이해했다면 Linus의 글을 살펴보세요.손상된 개체 복구에 대한 지침.
답변4
한동안 웹서핑을 하다가 마침내 이것을 발견했고 효과가 있었습니다.
git fetch origin
git reset --hard origin/master