Git에서 삭제 된 파일보기


105

Git으로 파일을 삭제 한 다음 커밋 했으므로 파일이 더 이상 내 작업 복사본에 없습니다. 해당 파일의 내용을보고 싶지만 실제로 복원하지는 않습니다. 어떻게 할 수 있습니까?

답변:


145
git show HEAD^:path/to/file

명시 적 커밋 식별자를 사용하거나 HEAD~n이전 버전을 보거나 삭제 한 후 둘 이상의 커밋이 있는지 확인할 수 있습니다.


6
path/to/file프로젝트의 상단 (저장소의 상단 디렉토리)에서 전체 경로입니다.
Jakub Narębski

1
내가있어 fatal: Invalid object name 'HEAD^'.(내가 단지 "초기 커밋"한 것을 언급해야)
vladkras

1
삭제가 스테이징되었지만 커밋되지 않은 경우 HEAD ^ 대신 HEAD를 사용합니다 (HEAD에 존재하므로). 예를 들어, 파일이 필요하다고 생각했기 때문에 파일을 추가하고 작업을 저장하기로 약속 한 다음 나중에 다른 솔루션을 찾았을 때 파일을 삭제했습니다. 다시 커밋하기 전에 원본 파일을 보려면, 내가 자식 쇼 HEAD했다 : 경로 /에 / 파일
토니 위컴

1
가장 최근 커밋에서 파일이 삭제 된 경우에만 작동한다는 점도 언급 할 가치가 있다고 생각합니다. 파일이 여러 커밋 전에 삭제 된 경우 다른 답변 중 하나를 사용해야합니다.
jayhendren

50

이전에 삭제 한 파일이고 개정판을 찾고 싶지 않은 경우 다음을 사용할 수 있습니다 ( foo이 예 에서는 파일 이름이 지정 되었으며 전체 경로를 사용할 수 있음).

git show $(git rev-list --max-count=1 --all -- foo)^:foo

rev-list모든 개정에 대한 호출 외모 foo만 나열 하나. rev-list역 시간순으로 나열 되므로 변경된 마지막 개정 foo이 삭제 된 커밋이됩니다 foo. (이것은 git이 삭제 된 파일을 변경하는 것을 허용하지 않고 삭제 된 상태로 남아 있다는 가정을 기반으로합니다 .) 더 이상 존재하지 않기 때문에 그대로rev-list 반환 하는 개정판을 사용할 수 없습니다 . 당신은 파일의 마지막 수정, 따라서이 들어 그냥 전에 하나 물어 봐야 의를 .foo^git show


2
마지막 foo를 ./foo로 변경해야 할 수도 있습니다. 그리고 bash를 사용하지 않는 경우 "git rev-list --max-count = 1 --all-foo"로 ID를 얻은 다음 "git show 5824127a8d99576632a04ac2b5c2344bcf751967 : ./ foo"를 ID (524 .. is id)
Dror

1
좋은 대답입니다. ^ 대신 ~를 사용해야했습니다. 이유가 확실하지 않습니다. 그리고 사람들이 그것에 대해 분명히 알 수 있도록 여기에서 'foo'는 git 루트의 전체 경로 여야합니다.
pedorro

**/foo경로를 모르는 경우 쓸 수 있습니다 (이것은 rev-list 명령에서는 작동하지만 show 명령에서는 작동하지 않습니다. 그러나 rev-list 명령에서 커밋하면 경로를 찾을 수 있습니다).
Nickolai

10

정확한 경로를 기억하지 못할 수도 있으므로 대신 git log에서 sha1을 가져올 수 있습니다.

 git cat-file -p <sha1>

5
Samuel Slund를 대신하여 : 위에서 사용할 sha1 합계를 찾는 한 가지 방법은 git whatchanged --no-abbrevgit (또는 svn) 로그와 유사한 출력을 제공하는 것입니다.
artless noise
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.