-
Git commit 삭제 후 복구 경험담Linux 2021. 4. 16. 23:05반응형
1. 서론
Linux 명령어로 git을 다룰 수 있다는 것을 알게 된 후 이것저것 눌러봤습니다.
덕분에 커밋, 파일을 통째로 삭제 해서 눈물을 흘리다가 복구하는 법도 배우게 됐습니다.
2. 파일은 그대로, 커밋은 삭제
git reset --soft HEAD~~~
이전 3개의 커밋을 삭제하는 명령어 입니다. 물결 표시를 1개만 하면, 1개만 삭제됩니다.
git reset --soft ORIG_HEAD
삭제한 커밋을 복구하는 명령어입니다.
3. 파일, 커밋 모두 삭제
주의해야 합니다. 제가 방금 날려보고, 쓰는 글입니다.
git reset --hard HEAD~~~ /* * 명시적으로 숫자를 입력해주는 방법 */ git reset --hard HEAD~1 git reset --hard HEAD~2
'~' 표시가 삭제할 이전의 커밋 개수입니다. 아래의 2개와 같이 명시적으로 숫자를 입력할 수도 있습니다.
git reset --hard ORIG_HEAD
물론 복구 명령어도 있습니다. 이전의 커밋으로 돌아가는 겁니다. 즉 삭제 전 커밋으로 돌아가게 됩니다.
보통 의도치 않게 명령어 입력으로 삭제하게 되면, 당황해서 이것저것 눌러보다 돌이킬 수 없는 강을 건너는 경우가 있습니다.
하지만 침착하시고, 아래의 명령어를 보시면 됩니다.
4. SHA-I 값 찾기 및 복구
git reflog
git 은 커밋을 할 때마다 계속해서 기록을 남깁니다. 이때 이 기록을 볼 수 있는 게 reflog입니다.
그렇다면 log와는 어떤 차이가 있을까요?
log는 현재 상태의 깃의 history만을 보여줍니다. 예를 들어 'git commit --ammend"로 커밋을 합친 후 'git log'를 하면, 이전의 커밋은 보이지 않고 합쳐진 커밋만 보입니다. 앞에서 설명한 대로 '현재 상태'의 history만 보여줍니다.
하지만 reflog는 '--ammend' 후에도 이전의 커밋을 모두 볼 수 있습니다. git이 뒤에서 조용히 모든 history를 기록하기 때문인데요. 그렇기 때문에 삭제한 커밋의 SHA-1 값도 찾을 수 있습니다.
이러한 이유에서 삭제됐을 때 당황하지 않고, 'reflog'만 기억하면 삭제 이전의 SHA-1 값을 가진 커밋을 볼 수 있습니다.
자, 이제 복구해봅시다.
'git reflog'로 SHA-I 값을 가지고 왔다면, 아래의 명령어를 실행합니다.
git cherry-pick [SHA-I 값]
'git cherry-pick' 명령어는 다른 브랜치의 커밋을 가지고 옵니다. merge와는 다르게 해당 커밋만을 가지고 올 수 있습니다.
그리고 해당 커밋 시점으로 복구가 됩니다. 간단하죠?
반응형'Linux' 카테고리의 다른 글
집나간 zip 파일 찾아요 (2) 2024.09.02 Nginx 무중단 배포 따라하고, 에러 해결 하기 (0) 2021.08.01 클라우드가 제공하는 1GB램, 알차게 써보기 (1) 2021.07.27