git stash 는 다들 많이 알 것이다. 어느날 stash 를 하다가 실수로 drop 해버렸다.
이럴때 drop 해버린 stash 에 담긴 파일들을 복구해보자.
Git(38) 삭제한 stash 복구 하기
1. 아래 명령어를 치면 내가 삭제한 commit 들이 나온다
$ git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
하나하나씩 살펴보자면,
$ git fsck // file system check 의 약자이다. database 의 connectivity 와 validity 를검사한다.
$ --unreachable // Print out objects that exist but that aren’t reachable from any of the reference nodes.
$ grep commit // git fsck 할때 commit 된 파일들만 조회한다는 뜻이다
$ cut -d ' ' -f 3 // 파일에서 띄어쓰기를 기준으로 3번째 필드만 보여주겠다는 뜻이다.
$ xargs git log --merges --no-walk // 즉, 위에서 받은 커밋에 대한 git 로그를 보여준다.
--merges 옵션은 Print only merge commits 이고,
--no-walk 는 Only show the given commits, but do not traverse their ancestors 라는 뜻이다.
즉, 해석해보면 이런 뜻이다.
"깃 파일들을 검사할 때, 도달할수없는(삭제한) 파일들을 찾고, 그중에 커밋만 추려내서, 깃 로그로 보여줘라"
(cut 옵션으로 추려서 보여주고)
2. 해당하는 커밋해쉬를 찾아서 stash 에 test 라는 이름으로 넣어주자
$ git update-ref refs/stash f3286a58b3f9f82c3f10bad018f253348bf81b7f -m test
하나하나씩 살펴보자면,
$ git update-ref // Update the object name stored in a ref safely
$ refs/stash // Git stash stores to the working directory locally ( .git/refs/stash ) 저장될 파일디렉토리 명시
$ f3286a... -m test // 커밋해쉬# 넣어주고 test 라고 이름을 적어주었다.
즉, 해석해보면 이런 뜻이다.
" f3286a... 로 시작하는 얘를 다시 살려서 test 라는 이름으로 refs/stash 파일안에 ref 를 업데이트해줘"
3. 다시 잘 복구 되었는지 확인해보자
$ git stash list
'Git' 카테고리의 다른 글
Git - Remote Origin Already Exists 에러 해결하기 (3) | 2023.08.09 |
---|---|
Git(39) 로컬 브랜치 덮어쓰기 (0) | 2023.02.09 |
Git(37) 원격브랜치에서 작업하고 pull, push 하기 (0) | 2022.04.19 |
Git(36) BitBucket - Merge branch 'master' of bitbucket.org (squash방식일 때) (0) | 2022.02.21 |
Git(35) remotes/origin/HEAD -> origin/master 헤드 삭제하기 (0) | 2022.01.25 |
댓글