과제를 제출한 후, 코드를 리펙토링하기 위해 따로 강의를 들으며 진행하던중 실수로 잘못된 코드를 GitHub에 push하여 merge해버렸다. 아무래도 혼자 공부하려고 한것이다보니 commit을 하지 않고 진행하고있던 중이었다. 확인해보니 내 과제는 아직 피드백 이전이었고, 나는 결국 오류가 난 코드를 제출한 꼴이 되었다.. 화들짝 놀라 고민하다가 나는 리팩토링 부분을 포기하고 제출했던 때로 돌리기로 했다.
- git reset과 git revert
이전 커밋으로 되돌릴 수 있는 방법으로는 이렇게 두가지가 있었다.
- git reset : 아예 흔적도 없이 깨끗하게 이전 커밋을 했던 상태로 돌리는 것
- git revert : 이전 상태로 새로운 커밋을 만들어 넣는 것
혼자 진행하거나 이후 작업한 부분이 필요하지 않는 경우는 git reset, 공동 작업중인 경우는 위험부담을 줄이기 위해 git revert를 추천하고있었다. 나는 과제 제출이다보니 깨끗하게 git reset을 선택했다.
- git reset 진행방법
git reset 명령어를 사용하여 이전의 commit 상태로 돌아가는 것
처음에는 아래 코드로 이전 진행했던 코드를 찾으려했다.
git reset --hard HEAD~1
그런데 하나씩 넘기다가 지나가기도했고, 뭔가 확실하지 않은 느낌이 들어 다른 방법을 찾아보았다.
1) hash 코드를 넣어서 reset 시키기
git reset --hard <commit-hash>
위 코드의 <commit-hash> 부분에 hash 코드를 넣어 원하는 commit 단계로 돌려놓는 방법을 선택했다. hash 코드 같은 경우 'git log'를 통해서도 확인할 수 있었고, git hub 웹사이트에서 내가 넣었던 commit 목록을 통해서도 확인할 수 있었다. 나는 웹사이트를 통해 코드를 가져와 코드를 이전 커밋 상태로 돌려주었다.
2) git hub에 push 시키기
로컬쪽에서 이전 커밋으로 돌려놓은 것을 원격 저장소에 push를 해주어야했다. 이번 push같은 경우 이전으로 돌리는 과정이다 보니 일반 'git push'로는 진행이 불가능했고, 강제 push를 넣어주어야했다.
git push -f origin <branch-name>
<branch-name>에 원하는 branch 이름을 넣어 push를 진행해주면 된다. 나는 main 자체에 문제가 생긴것이기 때문에 바로 main으로 넣어주었다.
- 문제
하지만 문제는 여기서 끝나지 않았다.
terminal을 통해 진행중이었는데, ssh키가 말을 듣지 않는 것이었다. 문제를 찾기 위해 chat gpt부터 이것저것 찾아보았는데, 생각해보니 나는 terminald을 통해 git clone해서 배포를 진행할 때 http를 통해 가져왔던 것이다. 코드를 작성했던 vs code를 통해 git push -f origin main를 진행하니 바로 적용 되었다.
terminal을 통해 다시 과거로 돌린 repository를 불러올 수 있었고, 과제 제출 자체는 이전 상태지만 다시 정상적으로 낼 수 있었다.
눈물 나는 경험이지만, 이번 경험을 통해 git hub에서 코드를 다시 이전 commit으로 돌리는 방법을 알 수 있었고, 최대한 commit을 자주하자는 다짐을 할 수 있었다. (아무리 혼자 공부하는 것이라도.. 물론 진행하던건 복사해서 따로 빼놓긴 했다.) 수정하는 동안은 마음이 많이 힘들었지만 그래도 많은 것을 배운 것 같아 보람찼다.
'개발 기초 다지기' 카테고리의 다른 글
장바구니기능의 ERD와 API 명세서 (0) | 2024.06.18 |
---|---|
배포 후 수정 하기 (git hub과 pm2) (0) | 2024.06.17 |
Prisma에서 include와 select의 차이점 (0) | 2024.06.12 |
알고리즘 문제 정리 (최대공약수와 최소공배수) (0) | 2024.06.11 |
JWT/인증 미들웨어 복습(팀프로젝트와 회고하며 복습하기) (0) | 2024.06.10 |
댓글