코인거래소의 API를 연동할 일이 생겨서, 작업을 해서 최종적으로 github에 올리게 되었는데, 이전 직장에서 사용하던 git 사용 습관상 master branch는 건드리지 않고, master branch를 새롭게 clone떠서 다른 branch로 만든 후 push, 그 후 master branch의 내용을 다른 branch와 rebase 하는 작업을 하다보니..
rebase 특성 상, commit 을 일렬로 쭉 나열하기 때문에, 테스트간 API Key를 넣어서 로컬에서 commit했던 이력도 전부 다 github에 올라가게 되버리는 참사가 일어나게 되었다.
이게 SVN만 사용하다보니, 로컬 commit이 같이 push가 될거라고는 생각을 못했는데, 치명적인 실수였던 것 같다.
당장 Key가 노출되었기 때문에, 거래소 API Key는 바로 삭제처리하고, 조금 더 완벽하게 하기 위해 github에 이미 올라간 API Key가 노출된 commit(HEAD 기준 바로 전 커밋)도 같이 없애 보기로 하였다.
아래와 같이 작업을 계획했고, 그 결과 자연스럽게 내가 노출한 Commit을 Commit을 안한거처럼 보이게 할 수 있었다.
1. remote repo 현재 버전을 로컬에 clone
$ git clone <Remote REPO URL>
2. 로컬에서 git rebase 명령어를 통해 HEAD와 바로 전 Commit을 합침
$ git rebase -i HEAD~2 # HEAD 포함 2개까지의 Commit을 하나의 Commit으로 만들겠다. # 위 명령어를 치면 editor가 열리며 아래와 같이 해당되는 Commit들이 목록에 보여짐 # 아래부터는 전부 Editor 메시지 pick 111111 HEAD 바로 이전 Commit pick 222222 HEAD Commit # HEAD 바로 이전 Commit과 HEAD를 합치기로 했으므로, HEAD 부분의 커밋에 해당하는 라인의 가장 앞에 있는 pick을 squash로 바꿔주고, 저장 후 빠져나온다. pick 111111 HEAD 바로 이전 Commit squash 222222 HEAD Commit # 이제 다시 editor가 뜨며, 새로운 commit 메시지를 입력하라고 나온다. 2개의 Commit을 자연스럽게 합치고, 메시지를 뭘로 할지 결정해서 입력해주고, 저장 후 빠져나온다. # 주의사항이 있다면, 주석을 제외한 모든 텍스트가 Commit 메시지가 된다. # This is the 1st commit message: HEAD 바로 이전 Commit # This is the commit message #2: HEAD Commit
3. remote repo에 push (github 정책 상 커밋 이력을 수정하게 되면 다른 사용자가 pull을 받은 경우 conflict이 날 수 있기 때문에, 기본적으로 허용을 안한다고함.. 이런 경우 --force 옵션을 사용하여 강제로 덮어버릴 수 있다.)
$ git push origin master --force
'개발 > Git' 카테고리의 다른 글
[Git] Windows환경에서 git bash 사용 시 CRLF 자동 생성 방지 (0) | 2018.04.27 |
---|---|
[Git] 설치 (0) | 2016.06.11 |
[Git] Repository 만들기 (0) | 2016.06.11 |
[Gerrit] Code Review시에 Intraline difference not available due to timeout 에러 해결 (0) | 2016.06.11 |
[Git Bash] git push 명령어 만으로 Gerrit Master에 push하기 (0) | 2016.06.11 |