본문 바로가기
IT, Software

Github - 잘못 Commit한 파일과 History 모두 삭제하기

by 기타마을이장 2024. 2. 25.

 

본격적으로 프로젝트에 참여하고 코딩을 하면서 당연하게도 형상관리 툴을 사용하게 됐다.

그리고 21세기 가장 보편적으로 사용되는 Git을 사용 중이다.

 

그런데... 너무 오랜만에 형상관리 툴을 사용해서 그런 건지 뭔지...

처음 뼈대작업을 하면서 프로토타입처럼 코딩할 때 사용했던 서버정보들이 최종 코드가 릴리즈 됐는데도 여전히 한쪽 구석에 있었고...

또 그걸 제대로 인지를 못한 상태로 Git에 Commit을 해버리는 실수를 하게 됐다.

이런 실수를 하다니;;; 스스로 또 한 번 반성의 시간을 가져본다 ㅠㅠ

 

물론 당연히 private repository이지만 그래도 누구라고 나나 팀원들의 계정 중에 하나만 해킹하면 접근이 가능하기에...

잘못 commit 한 파일을 삭제하는 것과 동시에 history까지 완전히 지우기로 했다.

그리고 역시 답은 구글링으로 찾아냈다ㅎㅎ

 

어렵다기보다는 조금은 복잡한... 그리고 자주 하는 작업이 아니다 보니 낯설다.

그래서 금방 잊을 듯하여... 혹시라도 나중을 위해서 잘 기록해 둔다.

 이 방법은 지우려는 history가 마지막 commit history인 경우에 가장 유효하다.

 

https://www.abrahamberg.com/blog/git-remove-commits-from-branch-after-push-reset-revert-or-rebase/

 

Git remove commits from branch after push: reset, revert, or rebase

You can remove commits from a branch by any of reset, revert, or rebase commands. Each has own pros and cons, let's learn them in details

www.abrahamberg.com

 

작업 자체는 command 창에서 수행해야 하고... git desktop을 함께 이용했다.

순서를 요약해 보면...

  1. 가장 최근 history를 command 창에서 삭제해 주고
  2. 새롭게 문제가 없는 파일들을 다시 repository에 add를 해준 다음
  3. 원격 repository에 강제로 push 하면 잘못 올라간 파일과 히스토리까지 모두 삭제된다. 

 

1. 잘못 commit 한 history 삭제하기(command 창)

command 창을 열고 " git log " 명령어를 수행해 본다.

마지막에 내가 commit 한 history가 보인다. 그리고 그 history와 파일들을 삭제하려고 한다.

git reset --hard HEAD~@@@ / 파일과 히스토리 모두 지우기

 

" git reset --hard HEAD~@@@ " 명령어로 commit history를 삭제해 준다.

@@@안에는 삭제하고 싶은 history의 개수를 입력하면 된다.

나는 마지막 거 하나만 삭제하면 되기 때문에 HEAD~1을 입력했지만 혹시라도 3개를 삭제하고 싶다면 HEAD~3 을 입력하면 된다.

수행을 하고 나서 다시 한번 " git log " 를 수행해 보니... 잘 지워져 있다.

 

물론 지금 수행한 것은 Local Repository에서만 history를 삭제한 상황이기 때문에

이후에 실제 소스들이 관리되고 있는 Remote Repository에도 업데이트를 해줘야 한다.

실제로 Github 사이트에서 Remote Repository를 확인해 보면 여전히 내가 마지막에 commit 한 것들이 그대로 남아있었다.

 

2. Remote Repository(Origin) 강제 Push 해주기(Github Desktop 활용)

이제 새롭게 업로드할 차례다.

Github Desktop에서 파일들을 준비해서 local repository에 다시 한번 add 해 준다.

그러고 나서 보면 작업목록 맨 하단에 " Force push origin " 이라는 메뉴가 생긴다.

그 메뉴를 선택해 주면 Remote Repository(Origin)에 방금 add 한 파일들이 강제로 덮어써진다.

그리고 history 역시 사라진다.

 

작업이 다 마무리되고 command 창에서 한번 더 " git log " 를 수행했더니...

역시나 기대했던 것과 같이 기존에 commit 했던 history는 삭제되고 새로 덮어쓴 history만 남아있었다.

 

Remote에도 잘 들어갔는지 확인해 본다. Github 사이트에서 보니... 아주 잘... 적용되어 있었다.

먼가 그래도 소소하지만 중요한 무언가를 잘 마무리했다는 생각에 뿌듯하다 ㅎㅎ

그리고... 이후에는 이런 실수를 하지 않아야겠다고 한번 더 다짐해 본다 ㅠㅠ

 

반응형

댓글