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를 사용하는 것이 안전합니다.
'DevOps > Git' 카테고리의 다른 글
| [Git] Git 실무에서 자주 쓰는 상황과 명령어 조합 (0) | 2025.05.07 |
|---|---|
| [Git] 작업 복구와 임시저장 : reflog, stash (0) | 2025.05.03 |
| [Git] Git 브랜치 전략 : 팀 환경에 맞는 전략 선택과 운영 방법 (0) | 2025.04.26 |
| [Git] 브랜치 통합 : merge, rebase, cherry-pick (0) | 2025.04.23 |
| [Git] 브랜치 전략 이해 : branch, checkout, switch, restore, fetch (0) | 2025.04.19 |