새소식

Programming/VCS

[git]실수로 지운 커밋(commit) 살리기

  • -

기록용으로 남겨둡니다. 참고 사이트에 자세히 나와 있으므로 꼭 참고하시기 바랍니다.


0. 현재 저장소가 지저분(?)하지 않아야 합니다. git status 명령으로 확인해봅니다.

이런 결과이면 다음으로 넘어가면 되지만 아직 수정 중인게 있는데 어쩌란 말야 하는 상황이라면 깔끔하게 임시 보관함(stash)에다 저장해줍니다.

imsi 내용으로 자세한(!) 설명을 남기고 저장했습니다. 이제 git status 명령을 내리면 nothing to commit이란 메시지가 포함되어 있을 겁니다. 


1. 지워진 커밋의 해쉬 값을 먼저 구합니다.


여기에서는 Set TCP/UDP magic ID to 0xA7A7A7A7 이라고 설명된 커밋을 복구하고 싶습니다. 이 줄의 맨 앞에 있는 7자리의 해쉬 값(e5f29e1)을 기억합니다.

2. 지워진 커밋으로 이동합니다. 

지워진 커밋으로 이동하는데 그냥 이동만 하면 master 가지(branch)에서는 여전히 접근이 안됩니다. 그래서 'recover-e5f29e1' 이란 가지를 만들어서 이 가지에 속하게 만들었습니다. 전 구별을 위해서 이름을 저렇게 지었고 -b imsi 같이 본인이 기억할 수 있는 형태로 지정하면 됩니다. 이렇게 생성한 가지 이름(recover-e5f29e1)을 기억합니다.

3. 주 작업 가지(master)로 이동합니다. 


4. 주 작업 가지에 아까 생성한 가지를 합칩니다. 


5. 이전에 생성한 가지를 지웁니다.

반드시 지울 필요는 없습니다. 하지만 지금 작업할 때는 무슨 용도인지 확실히 알지만 나중에는 왜 만들었는지조차 기억나지 않을 확률이 높습니다. 아예 저처럼 가지 이름을 어떤 목적의 가지인지 자세히 적어놓지 않는다면 더더욱 기억이 나질 않습니다. 나중에 또 필요해지지 않을 내용이라면 지워줍니다. 이미 master 가지에 포함되어 있으니깐요. 

6. 혹시나 0번 단계에서 임시 보관함(stash)에 저장한 것이 있다면 다시 되돌려주면 마무리됩니다.

git stash pop 명령을 내려도 거의 동일한 결과를 얻습니다. 다만 임시 보관소에서는 지워집니다. apply는 남아있습니다. pop 명령으로 되돌린 경우에는 지워진 내용에 대한 정보를 보여줍니다.




Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.