github commit 기록 삭제(변경)하기 / git reset / git push --force
말머리
혼자서 이것저것 연습하고 끄적이다보면
민감정보를 github에 올리는 실수를 저지를 수 있습니다.
API key나 나의 비밀번호, ip address등의 정보가 그대로 올라간 경우
자칫하면 해당 API 제공자측에서 나의 계정을 (일시)정지시킬 수도 있는데요,
이를 해결하려면 API key, 비밀번호를 바꾸는 건 물론
(처음부터 dotenv 파일을 수시로 관리해서 이런 일이 안일어나도록 해야겠지만)
github에 올라간 문제파일의 url주소 자체를 지워야 합니다.
방법: git reset 사용하기
1. 돌아가고자 하는 지점 찾기 $git log
$git log

2. 리셋하기
$git reset --hard 41e003f04d620aea09cf2d89e27ff255af56c03d // 돌아가고자 하는 지점의 commit

3. force 옵션으로 github repo에 저장하기
git push -f origin master

git reset 이해하기
>>commit 상태를 원하는 시점으로 되돌립니다.<<
이를 이해하기 위해서는 git의 commit data가
일종의 트리구조로 이루어져 있음을 알아야 합니다.
git reset 명령은 실행시 ref. pointer의 위치가 바뀌는 것은 물론,
pointer를 기준으로 노드끼리의 연결을 끊어냅니다.


git reset 옵션: mixed, soft, hard
hard
주의해서 써야 할 옵션입니다.
--hard 옵션을 선택한다면 다시는 기록을 되돌릴 수 없습니다.
지정된 commit 이후의 기록과 파일들을 모두 지웁니다.
mixed
기본 옵션입니다. ($git reset과 $git reset --mixed는 동일)
commit 기록은 삭제하되, 기존의 파일들을 untracked 상태로 제공합니다.




soft
commit 기록은 삭제되지만, 파일은 staged 상태로 남습니다.



git push --force

이제 reset을 완료했으니 remote repo만 수정되면 끝입니다.
하지만 이 상태에서 push를 했다간 아래와 같은 에러가 나고 맙니다.

이때 force 옵션을 주면 강제로 push해줄 수 있습니다.
물론 저처럼 혼자 끄적이는 branch에서라면 편하게 이런 방법을 쓸 수 있겠지만,
공유 branch라면 다른 팀원들이 삭제 대상인 commit 단계에서 작업중인지 확인해야합니다!
