개발/Git

[Git] 이미 리포지토리에 업로드 된 커밋 삭제하기

선우. 2023. 8. 15. 21:25

1. git reset

git reset HEAD^
  • 깃 커밋 내역을 삭제하고 싶을 때 git reset 명령어를 사용합니다.
  • HEAD는 현재 작업 중인 브랜치의 가장 최신 커밋을 가리키는 포인터입니다.
  • HEAD^ 그리고 HEAD~1 는 현재 커밋의 한 단계 이전의 커밋 즉, 직전 커밋을 의미합니다.
  • 두 단계 전 커밋을 가리키려면 HEAD^^ 라고 작성하면 됩니다.

 

2. git reset option

  1. git reset --mixed(생략가능)
    • HEAD를 지정한 위치로 이동시키면서 해당 커밋에서 add 했던 스테이징 영역은 취소됩니다.
    • 이전에 스테이징 됐던 변경내용이 스테이징 영역에서 내려가게 되어 unstaged 상태로 돌아갑니다.
    • 작업 디렉토리의 변경내용이 유지됩니다.
  2. git reset --soft
    • HEAD를 지정한 위치로 이동시키면서 해당 커밋에서 add 했던 스테이징 영역은 유지됩니다.
    • 이전에 스테이징 됐던 변경내용이 그대로 스테이징 영역에 머무르게 되어 staged 상태를 유지합니다.
    • 작업 디렉토리의 변경내용이 유지됩니다.
  3. git reset --hard
    • HEAD를 지정한 위치로 이동시키면서 해당 커밋에서 add 했던 스테이징 영역은 삭제됩니다.
    • 작업 디렉토리의 변경내용도 삭제됩니다.

 

3. repository에 push 하기

git push [리모트 브랜치 별명] [브랜치명]
git push origin main
  • 마지막으로 지우고 싶은 커밋이 존재하는 리포지토리의 브랜치에 push를 하면 커밋 내역이 삭제됩니다. 
  • 이렇게, git reset 을 사용할 때 어떤 옵션을 적용하느냐에 따라 변경 내용이 "unstaged, staged, 완전히 삭제" 될 수 있습니다.
  • 상황에 맞게 적절한 옵션을 골라 사용합시다.