DevOps/Git

[Git] 커밋 되돌리기 : reset, revert

okbear3 2025. 4. 30. 18:37

Git으로 작업하다 보면 커밋 메시지를 잘못 작성하거나, 수정하지 말았어야 할 파일을 커밋했거나, 아예 커밋 자체를 되돌리고 싶은 상황이 종종 생깁니다.

이 글에서는 커밋 이력 수정 및 되돌리기와 관련된 주요 명령어인 reset, revert, amend의 동작 원리와 사용 방법을 설명합니다.


revert – 커밋 내용을 되돌리는 새 커밋 생성

git revert는 특정 커밋의 변경 내용을 되돌리는 "취소 커밋"을 새로 생성합니다.
기존의 커밋 히스토리는 유지되며, 공유된 브랜치에서도 안전하게 사용할 수 있습니다.

git revert <커밋 해시>
   
옵션 설명
--no-commit revert 결과를 자동으로 커밋하지 않고, staging 상태로 둡니다.
--edit 커밋 메시지를 수정할 수 있도록 editor를 엽니다.

 

사용 예제

#특정 커밋 되돌리기
git revert <커밋 해시>

#최근 두 개의 커밋을 역순으로 되돌립니다.
git revert HEAD~2..HEAD
  • revert를 사용하면, 커밋의 정반대 내용이 적용된 새 커밋이 생성됩니다.
  • revert 명령어는 reset --soft와 동일한 결과를 가져오지만, 이력은 Revert “…” 라는 메시지가 추가됩니다.
  • revert를 사용하면 중간에 무슨 문제가 있었는지, 왜 돌아갔는지에 대한 기록이 가능하다는 장점이 있어, 주로 배포 이후 롤백 또는 협업 중 실수 수정 등에 사용됩니다.

 

reset - 커밋 이력 자체를 수정

git reset은 브랜치 포인터(HEAD)를 지정한 커밋 위치로 되돌립니다.
커밋, 스테이징 영역, 작업 디렉토리 중 어떤 것을 유지할지에 따라 동작 방식이 달라집니다.

git reset [옵션] <커밋 해시>
옵션 설명
--soft 커밋만 되돌림, 파일은 Staging 상태 유지
--mixed 커밋과 Staging 되돌림, 파일은 유지 (default)
--hard 모든 변경사항 제거(주의 필요)

 

사용 예제

#가장 최근 커밋만 취소(내용은 Staging에 유지)
git reset --soft HEAD^

#커밋과 Staging 영역 되돌림
git reset HEAD^

#파일 변경 내용까지 모두 되돌림
git reset --hard HEAD^

git reset <커밋 해시> #특정 커밋을 취소
git reset HEAD^ #가장 최근의 커밋을 취소
git reset HEAD~2 #마지막 두개의 커밋을 취소
  • reset를 사용하면, 커밋 히스토리를 깔끔하게 유지할 수 있고, 혼자 작업하는 경우 이전의 작업으로 편하게 되돌아갈 수 있지만, 팀원과 같은 브랜치에서 함께 작업할 때 커밋이 뒤섞여 버릴 수 있다는 위험한 단점이 있어, 주의해서 사용이 필요합니다.
  • --hard 옵션을 사용하게 되면, 데이터가 완전히 삭제되므로 신중하게 사용해야 하며, 되도록이면 작업 백업 후 사용하는 것이 좋습니다.
  • 원격 저장소의 공동으로 작업중인 브랜치에서는 reset을 사용 시 히스토리 충돌 가능성이 있어, 사용하지 않는 것이 좋습니다.

 

revert 와 reset의 차이점

revert 와 reset 모두 커밋을 되돌리는 목적은 같지만, 사용방식과 히스토리에 미치는 영향이 다르기 때문에 상황에 따라 올바르게 선택하는 것이 중요합니다.

구분 git reset git revert
되돌리는 방식 반대 커밋을 새로 생성 브랜치 포인터를 이전 커밋으로 이동
히스토리 보존됨 변경됨
원격 푸시 후 사용 가능함 가능하나 --force 푸시 필요, 협업 시 주의
주 용도 공유 브랜치에서 커밋 되돌리기 로컬에서 작업 이력 수정
복구 가능 여부 언제든 가능 reflog 없이 되돌리기 어려움 (특히 --hard)

실수를 수정할 수 있는 다양한 Git 도구 중, reset, revert, commit --amend는 상황에 따라 서로 다른 목적과 효과를 가집니다.

  • 혼자 작업 중일 때reset, commit --amend로 히스토리를 정리해도 좋고,
  • 공유된 브랜치에서 실수한 커밋을 되돌릴 때는 항상 revert를 사용하는 것이 안전합니다.