힘내 손상된 마스터 지점


9

Visual Studio 프로젝트를 위해 Windows 7에서 gitExtensions를 사용하여 Git 리포지토리를 엽니 다. 갑자기 비어 있습니다. 저장소가 존재하지만 모든 커밋이 사라졌습니다.

그래픽 인터페이스를 사용하고 있는데 업데이트 한 이후 처음으로 봤습니다.

커밋을 되 돌리는 방법에 대해 잘 모르겠습니다.

입력 할 때

git log 

나는 받는다

치명적 : 잘못된 기본 개정 'HEAD'

/programming/1545407/recovering-broken-git-repository를 본
업데이트 했습니다.

git fsck

그것은 돌아왔다 :

오류 : 잘못된 HEAD
치명적 : 느슨한 개체 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (.git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31에 저장 됨)가 손상되었습니다

반품 커밋 :

오류 : 참조 HEAD를 해결할 수 없습니다 : 해당 파일이나 디렉토리
가 없습니다.

마스터 브랜치 리턴 로깅

$ git log master warning : 깨진 심판 심판 / 헤드 / 마스터 무시. 경고 : 깨진 심판 심판 / 헤드 / 마스터 무시. 치명적 : 모호한 인수 'master': 작업 트리에없는 알 수없는 개정 또는 경로입니다. 경로를 수정본에서 분리하려면 '-'를 사용하십시오.

관련성있는 것들만 붙여 넣기

$ git reflog master
warning : 깨진 심판 심판 / 헤드 / 마스터 무시.
경고 : 깨진 심판 심판 / 헤드 / 마스터 무시.
치명적 : 모호한 인수 'master': 작업 트리에없는 알 수없는 개정 또는 경로입니다.
경로를 수정본에서 분리하려면 '-'를 사용하십시오.

더 유용한 정보 : 매번 다른 파일이 삭제 된 손상된 파일을 삭제할 때마다. 마스터 브랜치가 잘못된 것을 가리키는 것과 관련이 있다고 생각하기 시작했습니다. 헤드가 마스터를 가리키고 있다고 가정하기 때문입니다.

어느 날 나중에 :
나는 내 친구를 이것에 가져 갔고, 그는 로그를 통과 할 수 있었고 로그의 해시가 폴더의 객체와 일치하지 않는다고 말했다. 그는 마스터 브랜치를 로그 또는 이와 비슷한 것으로 재설정하려고 시도했지만 약간 잃어 버렸습니다. 도움이 되길 바랍니다.



1
@heavyd 업데이트를 확인하십시오
MrJD

답변:


3

저장소가 존재하지만 모든 커밋이 사라졌습니다.

정확히 무엇을 의미합니까? 작업 트리가 여전히 있습니까? 않는 .git/존재 하는가? 그 안에 파일이 있습니까?

게시 한 메시지는 파일 .git/HEAD이 존재하지 않음을 나타냅니다. 작업 트리의 예상 상태 (체크 아웃 한 항목)를 정의합니다. 해당 파일이 사라지면 git은 현재 위치를 알 수 없습니다.

이 내용으로 파일을 직접 만들 수 있습니다. ref: refs/heads/master

다른 지점에있는 경우 "마스터"를 지점 이름으로 바꾸십시오. 지점에 없었다면 더 복잡 할 것입니다.

.git/logs/HEADHEAD의 과거 상태를 기록하고 하단에 줄이 있습니다. 이 예제 라인은 체크 아웃을 보여줍니다. 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <rainer.blome@wherever.you.are.com> 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/masterrefs / heads / master 파일을 검사하면 마지막 커밋의 sha1을 포함해야합니다.

해당 파일이 손상되어 널 (null) 문자로 가득 찬 경우 해당 파일을 편집하여 최신 커밋의 sha1 .git/logs/HEAD또는 마지막 커밋 이전의 sha1을 넣으십시오 .

그런 다음 git reset --hard 'sha1 of the commit that you selected'


실제로 NULL 문자로 가득 차서 이전 커밋의 sha1을 넣었지만 git reset을 수행하면 "error : ref 'HEAD'에 대해 update_ref가 실패했습니다 : ref 'HEAD'를 잠글 수 없습니다 : HEAD를 참조 할 수 없습니다 : 잘못된 인수 "
환상적인

1

리포지토리가 손상된 것 같습니다. 가장 쉬운 방법은 백업에서 리포지토리를 복구하거나 원본 소스에서 리포지토리를 다시 복제하는 것입니다 (리포지토리에 많은 작업이 없다고 가정).

재 분류 / 복제가 옵션이 아닌 경우 Pro Git (무료 온라인 도서 또는 종이 버전 )을 통해 읽는 것이 좋습니다 . 전체 책은 매우 유익하지만 특히 마지막 장에서 Git의 내부 작동 방식을 이해하십시오. Git의 작동 방식을 이해하면 손상된 객체 복구에 대한 Linus의 지침을 살펴보십시오 .


슬프게도 숨겨진 파일을 백업하지 않고 .git이 숨겨졌습니다. 책 전체를 읽을 시간이 충분하지 않습니다. 시도해 볼만한 것이 있습니까?
MrJD

"내부에 관한 책을 읽으십시오"는 일반적인 조언 일 수 있지만 특정 문제와 질문을 해결하는 데 도움이되지는 않습니다.
Burhan Ali

0

웹을 잠시 동안 서핑 한 후 마침내 이것을 발견했으며 효과가있었습니다.

git fetch origin
git reset --hard origin/master

그러면 origin로컬에서 너무 많은 작업을 수행하지 않아도 변경 사항을 가져온 다음 로컬 master지사가 원격에 동의하게됩니다. 조심하십시오, 지역 변경 사항을 --reset폐기 하십시오 ! 게다가, 그것이 너무 깨지지 않았다면 git reset origin/master, master지점 의 마지막으로 알려진 (체크인 된) 상태를 복원했을 것 입니다.
폰 브랜드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.