Sangmun

git 파일 복구 본문

개발/github

git 파일 복구

상상2 2023. 1. 18. 00:14

이런걸 알고 싶지 않았다 ㅅㅂ

 

커밋을 한 경우

커밋을 한 경우에는 git reflog 명령어들을 이용해서 이동하고 싶은 지점을 찾고 (보통은 직전 지점일 것으로 예상한다)

git reset --hard commit-id 명령어로 원하는 지점으로 돌아가주면 쉽게 해결이 된다.

 

커밋을 하지 않은 경우

이 경우가 문제인데.... 파일들이 git add로 staged된 상태에서 커밋만 하지 않고 git reset --hard 명령어를 이용해서 다른 지점으로 넘어간 경우이다. 즉 staged 되었던 파일들이 그대로 날아가게 된다.

 

다행히 복구할 방법이 있기는 했고... 나의 경우에는 해당 방법과 관련한 좀 더 유용한 옵션을 몰라서 좀 애를 먹었지만 어쨌든 살리는 데는 성공은 했다.

 

아무튼 우선 git fsck --lost-found 명령어를 입력하면 아래와 같이 파일(blob) 혹은 디렉토리(tree)의 해시값이 출력된다.

$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (627/627), done.
dangling blob 0c6abc2d5faabc05babf319996ed80620797999f
dangling tree b5bff3dcdc0f8fa00c9bfa2be1f64f7af5feec3f

출력된 해시값을 바탕으로 파일 내용을 확인 할 수 있다.

$ git show 0c6a
#!perl

use 5.010;
use strict;
use warnings;
...

그렇다면 git show hash_value >> filename과 같이 명령어를 입력해서 파일의 내용을 복구는 할 수 있다.

 

그렇지만 해당 해시값이 어떠한 파일을 나타내는지는 알 수가 없는데, 해당 문제점을 해결할 방안으로 git cat-file이 있는 것 같다.

 

아래의 블로그의 글을 보면 git cat-file 명령어를 이용하여 0842 해시값으로 시작하는 디렉토리를 탐색한 것으로 보이는데 파일명도 출력이 되는 것을 확인할 수 있다.

$ git cat-file -p 0842
040000 tree 8b3468edc53b977fde3f5e2ae423009fa487c9e0    _Inline
100644 blob f22308643a862993af01681ef5a5e8fcfebe88fe    sphere.pl
100644 blob ff9098d4b4b4a16ed54d418a3ec43b8c4f5cffbc    test.c
100644 blob 04f766def6dcd4a1d297a84bc25cd9df385373bc    test.o

 

git cat-file의 정확한 기능과 효용은 아직 사용해보지 않아서 잘 모르겠으나 웬만하면 쓸일이 없었으면 좋겠다..

 

http://gypark.pe.kr/wiki/Git/%EB%B3%B5%EA%B5%AC

 

Git/복구 : GyparkWiki

[edit]1. 커밋까지 한 상태에서 git-reset --hard 옵션으로 덮어써 버린 경우 커밋 개체들이 아직 .git 디렉토리 아래에 남아 있기 때문에 복구가 그다지 어렵지 않다 (시간이 흐르면 - 며칠? 한달? 정확

gypark.pe.kr

 

'개발 > github' 카테고리의 다른 글

github action으로 google cloud에 CI/CD 환경 구축하기  (0) 2023.02.12
github action 기본사항  (0) 2023.02.12
git simulation  (0) 2022.12.31
git reset, git revert  (0) 2022.12.28
vscode에서 git 사용하기 + 유용한 extention들  (0) 2022.12.18
Comments