본 문서는 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)
'번역 > Git Notes for Professionals' 카테고리의 다른 글
28.1: 디렉토리 이름 변경하기 (0) | 2020.01.13 |
---|---|
27.1: Subtree 를 생성 / Pull / Backport 하기 (0) | 2020.01.13 |
26.12: 대화형으로 stash 하기 (0) | 2020.01.08 |
26.11: stash 되어있는 예전 변경사항들을 복원하기 (0) | 2020.01.07 |
26.10: checkout 을 이용하여 stash 의 일부분만 적용하기 (0) | 2020.01.07 |