2009-07-28 2 views
3

질문은 하나의 파일에 대한 질문인데 "How to restore Git after fatal file system error?"과 관련이 있습니다. 내가 파일을 필요로하는 곳에 마지막 주 2009-07-27 23시 58분에 도착해야 힘내에서 파일 복원하기?

:

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml 

가 어떻게 충돌 후 파일을 복원 할 수 있습니까?

ADDED : 파일을 어디에서 찾을 수 있습니까? 그들이 무엇을하기로되어 있나?

그레이엄의 팁

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 

윌리엄의 팁

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 
+0

답변이 잘못되었습니다. --since = '...'('='추가) –

답변

2

가끔 내 git 로컬에서 파일이나 디렉토리를 삭제하고 그 파일 만 복원하려고합니다.

git checkout -- filenameOrDirectory 

음표 사이의 공간 : 나는 다음과 같은 명령을 실행합니다.

+0

없이 -를 사용하면 파일/디렉토리가 마지막 커밋에서 복원됩니다. –

+1

예, 로컬 리포지토리에서 가져옵니다.그래서 예를 들어, 최근에 "git pull"을하고 특정 파일 하나를 변경했다면, 마지막으로 git pull을했을 때의 시점으로 복원하고 싶다고 결정한 경우이 명령을 사용할 수 있습니다. 나는 그것이 매우 편리하다는 것을 안다. 그것은 마지막으로 git pull 상태 인 파일을 복구하는데, 이것은 로컬 repo 상태입니다. 너도해볼 수있어. 파일이나 디렉토리를 삭제 한 다음 실행하면 복원해야합니다. – j2emanue

4

당신이 중 하나의 파일을 얻을 필요가 있다면 그 다음 자식 체크 아웃을 할 것입니다 저장소에 커밋 너를 위해서. 특히 :

git checkout <sha> <filename> 

현재 작업 복사본에 커밋 < 샤에서 파일 < 파일 이름을>> 검색합니다. 모든 커밋에 대한 참조 일 수 있으므로 분기 이름, 태그 이름, HEAD ^^^^ 또는 원하는 모든 것 ...

+0

커밋 ID가 아니라 해당 커밋의 로그 메시지가 "하나의 클래스 다이어그램 만이 아닙니다"입니다. 커밋에 대한 SHA1 ID와 같은 커밋을 참조하는 몇 가지 방법이 필요합니다. 자식 로그는 당신에게 그것을 줄 수 있어야합니다. – Graham

+0

어디에서 명령을 실행해야합니까? 오류를 업데이트했습니다. –

+1

git 디렉토리의 최상위 레벨로 변경하십시오. 'git ls-tree -r --name-only master'를 실행하여 복구하려는 파일이 'master'에 있는지 확인하십시오 (포함 된 스크린 샷은 2009-07-27 23:58 상태입니다). 'git checkout master - '을 실행합니다. 여기에서''는 git-ls-tree 출력에 나타납니다. –

1

어디서나 저장소? 그렇다면 거기에서 작업 디렉토리로 이동 한 다음 파일을 체크 아웃하십시오. 당신은 할 수 있습니다 :

 
git log --since='2009-07-27 23:58' --pretty=oneline -n 1 

원하는 해시를 얻을 다음을 통해 파일을 얻을 : 당신이 저장소의 더 손상되지 않은 작업 사본이없는 경우

 
git checkout <file> <hash> 

, 당신은 '자식 fsck를'을 시도 할 수 있습니다, 그러나 파일을 잃어버린다면 성공 확률은 작거나 없습니다.

+0

명령의 오류를 질문에 추가했습니다. –

관련 문제