Git 특정 커밋 삭제하기
굉장히 오랜만의 포스팅이네요. 요즘은 Clojure에 깊이 빠져있습니다. 앞으로는 ReScript 말고 Clojure 포스팅도 많이 올려볼 예정입니다.
오늘의 문제 상황
팀원분이 만든 브랜치에서 분기한 브랜치에서 작업 후, 그 내용을 main 브랜치에 머지하고자 하는 상황입니다. feature 브랜치 A B C (문제의 커밋) D E
앗, 하지만 알고보니 feature의 C 커밋에는 민감한 credential 정보가 들어있었습니다. 어차피 private repository이긴 해도, 이는 반드시 막아야합니다. 재빨리 PR을 close 하고, 다음의 조치를 취했습니다.
해결책
- https://support.github.com/contact 에서 pull request 로그를 지워달라고 요청
- force push로 B 이후의 커밋 덮어쓰기
여기를 참조했습니다.
- 2를 좀 더 상세히 풀어보겠습니다.
- 우선 문제의 커밋 바로 전인 B로 돌아갑니다. git reset –mixed hash-b –mixed를 사용하면 코드 (참조에서의 sandbox)는 그대로지만, 그 이후의 모든 commit과 git add된 내용을 되돌립니다. 즉, B의 상태에서 C, D, E의 변경사항이 모두 staging되지 않은채로 있게됩니다.
- 문제의 커밋에서 문제가 된 내용을 수정합니다.
- git add . 로 수정사항을 커밋한 뒤,
- git push –force로 B 이후의 커밋을 날립니다.