GitNotes.26-13.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 26.13: 삭제된 stash 복구하기

stash 항목을 pop 시킨 이후 터미널을 아직 닫지 않은 상태라면, 화면에 표시되어 있는 git stash pop 의 결과 메시지로부터 해당 삭제된 stash 의 hash 값을 알아낼 수 있다:

$ git stash pop [...] Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)

(git stash drop 명령을 수행한 경우에도 마찬가지로 동일한 형태의 메시지를 출력할 것이다.)

혹은, 아래와 같은 방법으로도 hash 값을 검색할 수 있다:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

위 명령은 커밋 graph 의 단말상에서 어떠한 브랜치나 태그를 통해서도 참조되지 않는 커밋들을 나타내 주어, 지금까지 생성한 모든 stash 커밋을 포함한 모든 잃어버린 커밋들이 표시될 것이다.

해당 명령어의 결과에서 원하는 커밋을 찾아낼 수 있는 가장 간단한 방법은 명령어의 결과를 gitk 명령으로 찾아보는 것일 것이다:

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

위 명령은 저장소 browser 를 실행하여 해당 저장소에서 존재했던 모든 커밋들을 현재 참조 가능 여부를 가리지 않고 모두 출력하여 줄 것이다.

별도의 GUI 프로그램보다 콘솔상에서 graph 를 표시하고 싶다면 위 명령어의 gitk 부분을 git log --graph --oneline --decorate 와 같은 명령으로 대체할 수도 있을 것이다.

이 중에서 stash 커밋들을 추려보고 싶다면, 커밋 메시지 중에서 아래와 같은 형태를 찾아볼 수 있다:

WIP on somebranch: commithash Some old commit message

복구하고자 하는 커밋의 hash 값을 찾아냈다면, stash 를 통해 해당 내용을 적용할 수 있다:

git stash apply sh_hash

아니면 gitk 의 context 메뉴를 이용하여 현재 참조 불가능한 커밋 중 원하는 커밋을 새로운 브랜치로 생성할 수도 있다.

그러한 다음에는, 일반적인 방법들을 이용하여 무엇이든 원하는 작업을 수행한 뒤, 사용 완료한 해당 브랜치를 제거해 버리면 된다.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts