..

Reset Commit In Remote Repository

시간이 없어서 해당 문제를 겪고 3일 뒤에 글을 쓰려니 기억이 나질 않는다… 이래서 시간이 없더라도 간단하게 작성해놔야하는데 😂

깃에 올라가면 안되는 파일이 올라갔는데 그걸 브랜치에 push 한 뒤, 알아채버렸다. 한가지 다행인 사실은 메인 브랜치는 아니고, 특정 기능 개발 브랜치였다.

방법

커밋을 취소하기 방법은 revertreset이 있다. 간단히 설명해 revert는 커밋을 취소한 기록이 남고, reset은 커밋을 취소한 기록이 남지 않는다.

그 중 나는 reset을 사용했다.

돌아갈 이력 확인

git reflog 명령어를 통해 돌아갈 이력을 확인한다. 만약 내가 잘못한 커밋이 ID가 d6cd12c라면, 돌아갈 이력은 18b4857이다.

$ git reflog
ca0f23b (HEAD -> master, origin/master) HEAD@{0}: commit: [ADD] 조건을 사용해 tree 뷰에 column 숨기기
d6cd12c HEAD@{1}: commit: [ADD] 커스텀 모듈 설치 시, 기존 모듈 번역의 수정 사항 적용하기
18b4857 HEAD@{2}: commit: [ADD] 특정 그룹만 수정이 가능하도록 view 설정 (editable)
4e39129 HEAD@{3}: commit: [ADD] %()d 형식의 name을 가진 버튼 가져오기
b425342 HEAD@{4}: commit: [ADD] Odoo 카테고리 페이지 추가
6b4ffcf HEAD@{5}: commit: [ADD] 파이썬 list에 여러 값 append 하기

reset으로 되돌리기

git reset 명령어를 이용해 되돌리고 싶은 커밋으로 되돌린다.

git reset --soft 18b4857


현재는 로컬에서만 되돌아간 상태이므로, 원격에 반영하고 싶다면 아래 명령어를 사용한다.

⚠️ 원격에서까지 커밋 기록을 지우면, 복구할 수 없으므로 신중하게 사용해야한다.

git push --force origin master


push까지 했을 때는 지금처럼 reset을 사용하기 보다는 revert를 사용해야한다. (개인 프로젝트가 아닌 팀프로젝트에서는 더더욱!)

다음부터는 꼭 revert를 사용해 기록을 남기도록 하자!

참고

https://jupiny.com/2019/03/19/revert-commits-in-remote-repository