2016-08-17 1 views
0

실수로 git reset --hard으로 재설정 된 저장소에 파일이 있습니다. 파일은 여전히 ​​저장소에 있지만 변경 내용이 커밋되지 않았으므로 가져올 수 없습니다. 힘내 : 특정 파일을 재설정하기 위해 커밋되지 않은 변경 실행 취소

나는 몇 가지 관련 질문을 발견 :

그러나이와 난 그냥이 최근 한 일부 오래된 잃어버린 물건을 찾을 수 있지만. 이 특정 파일에 대해서만 grep의 역사가 있습니까?

편집 : 도움이 될 수있는 것은 내가 잃어버린 파일의 내용을 알고 있다는 것입니다. 아마 내가 할 수 있다면 grep 매달려있는 얼룩 /이 내용으로 커밋?

+0

IDE를 사용하고 있습니까? 그렇다면 로컬 기록을 확인하거나 실행 취소를 시도하십시오. –

+0

불행히도 아니요, 이것은 원격 호스트에있었습니다. –

+0

재설정하기 전에 'add .' 했습니까? 그렇지 않다면 복구 할 방법이 없다고 생각합니다. –

답변

0

힘내는 데이터베이스에 개체를 저장합니다. 이 작업을 수행하여 파일을 찾을 수 있습니다 :

find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort 

당신은 날짜 개체의 목록을 얻어야한다. 각 항목은 sha로 끝납니다. (즉 d670460b4b4aece5915caf5c68d12f560a9fe3e4) 각 샤을 가지고, 그리고 입력 :

git show <the sha> 

당신은 당신이 올바른 파일을 찾을 전에 여러 시도 할 수 있습니다. 그 중 하나가 분실 파일이어야합니다 -

내 대답은 당신이

git fsck --full --cache --dangling 

을하고 dangling blob 항목을 볼 수 https://stackoverflow.com/a/7376959/4374801

0

에서 파생됩니다.

당신은 (우리가 확실하게, 참조되지 않은 개체의 큰 세트를 선택 여기) grep을 시도 할 수 있습니다 :

git fsck --unreachable --no-reflogs --full 2>/dev/null | awk '$2 == "blob" {print $3}' | xargs git grep -a your-search-string 

그것은 일치하는 라인과 함께 발견 덩어리의 SHA-1을 인쇄합니다.

해시를 찾았 으면 git show <hash>을 사용하여 파일을 확인하십시오.

관련 문제