Git 커밋 삭제 및 깃헙 커밋 내용 삭제 방법

작업을 하다가 아무 생각 없이 커밋을 하고 깃헙에 push 했는데 바로 뭔가 잘못된 것을 발견하고 삭제하고 싶을 경우가 있습니다. 예를 들면 비밀번호 같은 것이 그냥 올라가버린 경우죠. 그래서 Git 커밋 삭제 및 원격 저장소에 반영 시키는 방법에 대해 알아봅니다.

항상 까먹는 버릇이 있어서 나중을 위해서 기록해 둡니다.

git 커밋 삭제 작업 순서

  1. git log 확인 : 취소를 원하는 커밋의 아이디나 위치 확인
  2. 해당 커밋 관련 git tag가 있다면 로컬저장소의 tag 삭제 및 원격 저장소 tag 삭제
  3. 로컬 commit 취소 (git reset ~)
  4. 수정 사항 반영 후 재 스테이징(add) 및 다시 커밋(commit)한다.
  5. 원격 저장소에 로컬저장소 내용 덮어쓰기 (git push origin 브런치명 -f)
    – 원격저장소에 덮어 써버리기 때문에 주의 요망.
  6. tag가 필요하다면 만들고 원격에 push 함.

1. git log : 커밋 로그 확인

일단 git log 해서 내가 어떤 커밋을 삭제해야 하는 지 확인해야 합니다. 방금 전에 커밋한 것을 삭제해야 하니까 가장 최근의 커밋을 확인합니다.

git 커밋 삭제 : git log 화면
git log 화면

삭제해야 할 커밋은 2f09269… (HEAD->main, …) 커밋입니다. 가장 최근 커밋이기 때문에 가장 위에 있고 HEAD가 붙어 있습니다.

2. git reset HEAD^ : 가장 최근 커밋 삭제 (로컬 스토리지)

가장 최근 git 커밋 삭제 하기 위해서 git reset HEAD^명령을 커서에 입력합니다.

깃 커밋 삭제 후 모습
깃 커밋 삭제 후 모습

위의 이미지와 같이 처음 위에 있던 커밋은 삭제되고 아래의 커밋의 올라와서 HEAD가 되었습니다.

3. 로컬저장소에서 수정할 내용 반영 및 다시 커밋

중요한 파일이 빠졌으면 다시 넣고, 개인적인 내용이 들어 있었다면 빼고 …. 등등의 수정사항을 저장한 후에 다시 스테이징(add)하고 커밋(commit)합니다.

4. git push origin 브런치명 -f : github에 새로운 commit 내용으로 덮어쓰기

git push origin 로컬스토리지이름 -f 이 명령을 통해서 로컬 스토리지의 현재 내용으로 원격저장소(origin)에 덮어 써버립니다. 다만 -f 옵션은 강제로 over write 하는 것이므로 협업을 하는 경우에는 상당히 주의를 해야 하겠습니다.

[참고] git reset 옵션 커밋아이디 : 원하는 커밋 이후의 모든 커밋을 삭제

git reset –soft “커밋아이디”

–hard : 돌아간 커밋 이후의 변경 이력을 전부 삭제
-> 모두 삭제되므로 매우 신중히 결정해야 함.

–soft : 변경 이력 삭제, 변경 내용은 남아있음, git add 안된 상태
-> 과거 이력만 지우고 이후에 무대에 올려놓은 것으로 바로 commit 하고 싶을 때

–mixed (디폴트 값) : 변경 이력 삭제, 변경 내용은 남아 있음, git add 된 상태
-> 커밋을 되돌렸고, 변경된 내용이 남아있어서 다시 추가할 수 있는 상태


[참고]

답글 남기기

6 − 6 =