상세 컨텐츠

본문 제목

github commit 기록 삭제(변경)하기 / git reset / git push --force

버전관리도구/Git

by moonionn 2021. 2. 12. 02:24

본문

말머리

혼자서 이것저것 연습하고 끄적이다보면

민감정보를 github에 올리는 실수를 저지를 수 있습니다.

 

API key나 나의 비밀번호, ip address등의 정보가 그대로 올라간 경우

자칫하면 해당 API 제공자측에서 나의 계정을 (일시)정지시킬 수도 있는데요,

 

이를 해결하려면 API key, 비밀번호를 바꾸는 건 물론

(처음부터 dotenv 파일을 수시로 관리해서 이런 일이 안일어나도록 해야겠지만)

github에 올라간 문제파일의 url주소 자체를 지워야 합니다.

 

 

방법: git reset 사용하기

1. 돌아가고자 하는 지점 찾기 $git log

$git log

 

 

2. 리셋하기

$git reset --hard 41e003f04d620aea09cf2d89e27ff255af56c03d // 돌아가고자 하는 지점의 commit

HEAD is now at ... 라는 안내문이 나오면 성공!

 

 

3. force 옵션으로 github repo에 저장하기

git push -f origin master

수정 전(좌) 수정 후(우) 같은 url로 접근했을 때

 

 

git reset 이해하기

>>commit 상태를 원하는 시점으로 되돌립니다.<<

이를 이해하기 위해서는 git의 commit data가

일종의 트리구조로 이루어져 있음을 알아야 합니다.

git reset 명령은 실행시 ref. pointer의 위치가 바뀌는 것은 물론,

pointer를 기준으로 노드끼리의 연결을 끊어냅니다. 

 

git reset 전, 가장 최신 commit이 HEAD

 

commit1 으로 reset한 후, HEAD가 변경되고 commit2와의 연결이 삭제된다.

 

 

git reset 옵션: mixed, soft, hard

hard

주의해서 써야 할 옵션입니다.

--hard 옵션을 선택한다면 다시는 기록을 되돌릴 수 없습니다.

지정된 commit 이후의 기록과 파일들을 모두 지웁니다.

 

 

mixed

기본 옵션입니다. ($git reset과 $git reset --mixed는 동일)

commit 기록은 삭제하되, 기존의 파일들을 untracked 상태로 제공합니다.

first file만 있던 commit 상태로 되돌아갔는데 second file이 아직 살아있다.

 

staged된 파일 리스트
untracked 파일들은 남겨졌지만, git에서는 모든 기록이 삭제되었다.
$git status로 untracked files 존재를 확인할 수 있음.

 

 

soft

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

staged된 파일이 두 개 있는 걸 확인.

 

 

git push --force

force..?

 

이제 reset을 완료했으니 remote repo만 수정되면 끝입니다.

하지만 이 상태에서 push를 했다간 아래와 같은 에러가 나고 맙니다.

 

이때 force 옵션을 주면 강제로 push해줄 수 있습니다.

물론 저처럼 혼자 끄적이는 branch에서라면 편하게 이런 방법을 쓸 수 있겠지만,

공유 branch라면 다른 팀원들이 삭제 대상인 commit 단계에서 작업중인지 확인해야합니다!

 

 

 

무시무시한 옵션인 만큼 많은 짤들을 양산해낸다

 

'버전관리도구 > Git' 카테고리의 다른 글

VS code로 github 연동하기  (0) 2021.03.09

관련글 더보기

댓글 영역