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
를 사용하는 것이 안전합니다.