개발지식공간

삭제한 Git stash 복구하기 (SourceTree 및 기타 툴에서도 가능한 방법)

이진유진 2024. 1. 31. 11:13
반응형
회사에서 있었던 Git stash 삭제 이슈를 도와주다가 발견한 숨은 꿀팁을 공유하려고 합니다!

지금까지 했던 모든 개발을 모두 날려버릴 뻔했던 상황에 그 스태시를 날린 컴퓨터만 있다면 가능한 방법입니다!

 

1. 내가 개발중인 프로젝트 파일 위치에 찾아 들어갑니다.


기초 명령어


ls                 현재 있는 위치의 리스트를 전부 보여줍니다.

cd 폴더명    지금 있는 곳에서 폴더명으로 Change Directory를 합니다. (현재 있는 곳과 연결된 곳만 가능합니다.) 

cd ..             바로 이전 폴더로 이동합니다. 

 

저는 현재 MacOS를 사용하고 있는데요! 

기본 명령어는 모든 운영체제에서 거의 동일하게 사용되고 있으니 처음 터미널을 사용해 보더라도 당황하지 말고 사용해 보세요! 

 

2. 프로젝트 파일 위치에서 아래 명령어를 입력합니다. 

git fsck --no-reflog | awk '/dangling commit/ {print $3}' | xargs -L 1 git --no-pager show -s --format="%ci %H" | sort

 

위의 명령어를 입력하게 되면, 

stash의 해시값과 저장 시간을 알 수 있습니다!

 

맨 아래부터 최신 순서니까 당황하지 말고 시간을 보고 내가 지운 stash의 해시값을 확인합니다. 

 

 

3. 아래 명령어를 통해 stash를 코드에 적용합니다. 만약 툴을 사용하고 있다면, 그 툴에서 내가 적용하고 싶은 브랜치로 들어간 후에 명령어를 입력하면 됩니다! 

git stash apply 해시값

 

4. 변경된 코드가 찾던 stash가 맞다면 작업을 이어나가시면 됩니다! 아니라면, 위의 작업을 반복하며 찾으면 됩니다! 


밑의 코드를 사용해, 어떻게 내 로컬 컴퓨터에 남아있는 스태시를 찾을 수 있는지 설명해 드리겠습니다!


git fsck --no-reflog | awk '/dangling commit/ {print $3}' | xargs -L 1 git --no-pager show -s --format="%ci %H" | sort

$git fsck

file system check. Database의 연결성(connectivity)과 유효성(validity)을 검사합니다. 


$git fsck --no-reflog

Git 객체 데이터베이스를 검사 후 Dangling Commit을 찾습니다. 


$awk '/dangling commit/ {print $3}'     

앞서 찾은 Dangling Commit에 대한 정보 중에서 커밋 해시값을 추출합니다. 


$xargs -L 1 git --no-pager show -s --format="%ci %H"   
앞서 추출한 각 커밋의 해시값에 대하여 git show 명령어를 통해 커밋의 시간 정보(%ci : 커밋 시간)와 해시값(%H : 커밋 해시)를 출력합니다. 


$sort

출력된 정보를 시간순으로 정렬합니다. 

 

 

위의 코드는 Dangling commit들을 찾아 해당 커밋들의 시간과 해시값을 시간순으로 정렬하여 출력하는 것입니다. 

주로 Git Database에서 누락된 커밋이나 잘못된 작업으로 인해 발생한 Dangling Commit을 확인하고자 할 때 사용합니다.

 


Dangling Commit? 


Git Database에서 더 이상 참조되지 않는 커밋을 의미합니다. 
이러한 커밋들은 브랜치나 태그 등의 참조로부터 떨어져 있어, 현재 작업 트리에 포함되지 않고, 접근이 어려운 상태입니다. 
이러한 커밋은, 삭제된 브랜치, 리베이스 작업, 브랜치 강제 푸시 등으로 인하여 발생합니다. 

git fsck 명령어를 통해 Dangling Commit을 찾을 수 있습니다. 

 


 

오늘은 실수로 스태시를 삭제하게 되어 난감한 상황이 된 분을 도와주며 발견하게 된 꿀팁들을 설명하게 되었는데요! 
만약 이 글을 보고도 해결이 되지 않는다면, 제가 참고한 다른 블로그 글을 밑의 출처에 넣어놨으니, 꼭 이 글을 발견한 분들은 잘 해결되길 바랍니다! 

제 잘못된 지식이나, 제가 더 공부해야 할 점이 있거나, 제 도움이 필요하다면, 
언제나 댓글로 무한한 관심 부탁드려요:) 
감사합니다:) 행복한 하루 보내세요! :) 

 

 

출처

https://devbirdfeet.tistory.com/234

https://systorage.tistory.com/entry/Git-git-stash-clear-%EB%B3%B5%EA%B5%AC%ED%95%98%EA%B8%B0

반응형

'개발지식공간' 카테고리의 다른 글

암호화된 값을 URL 인코딩 시 주의할점 + Tip!  (0) 2024.02.29
Base64와 UTF-8의 차이점  (0) 2024.02.29
Algorithm 알고리즘이란?  (1) 2024.01.31
Flowchart(흐름도)  (0) 2024.01.12
Compile언어와 Interpreter언어  (0) 2024.01.12