반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 문자열
- 인텔리제이
- Eclipse
- js
- string
- 배열
- Array
- junit5
- IntelliJ
- list
- input
- 자바
- 단위테스트
- 정규식
- junit
- 테스트자동화
- HashMap
- java테스트
- html
- Visual Studio Code
- 스프링부트
- CSS
- vscode
- math
- 자바스크립트
- javascript
- 자바문법
- Java
- SpringBoot
- ArrayList
Archives
- Today
- Total
어제 오늘 내일
[Git] 커밋을 되돌리고 싶을 때! Reset vs Revert 완벽 정리 본문
개발을 하다 보면 "아차!" 하는 순간이 찾아옵니다. 잘못된 코드를 커밋했거나, 아예 커밋하기 전으로 시간을 되돌리고 싶을 때가 있죠.
이번 포스팅에서는 Git에서 커밋을 취소하는 두 가지 방법, Reset과 Revert의 차이와 사용법을 확실하게 정리해 드리겠습니다. 상황에 맞춰 골라 쓰시면 됩니다!
커밋을 취소하는 방법은 크게 두 가지가 있습니다.
- Reset: 시간을 아예 과거로 되돌립니다. (기록이 사라짐)
- Revert: 취소했다는 기록을 남기고 되돌립니다. (기록이 남음)
이 두 가지를 언제, 어떻게 써야 하는지 알아볼까요?
1. 나 혼자 작업 중일 땐: git reset
reset은 타임머신과 같습니다. 특정 시점(커밋)으로 돌아가고, 그 이후의 역사는 지워버립니다. 혼자 쓰는 브랜치에서 기록을 깔끔하게 만들 때 유용합니다.
돌아가는 방식(옵션)에 따라 작업 내용을 살릴지, 지울지 결정할 수 있습니다.
① 커밋만 취소하고 코드는 살리고 싶을 때 (--soft)
방금 한 커밋이 마음에 안 들어서 다시 커밋하고 싶을 때 사용합니다.
$ git reset --soft HEAD~1
- 상태: 커밋은 사라지지만, 작업했던 파일들은 Staging Area(add 된 상태)에 그대로 남습니다.
- 활용: 메시지를 고치거나 파일을 조금 더 추가해서 바로 다시 커밋할 때 좋습니다.
② 커밋도 취소하고 add도 취소하고 싶을 때 (--mixed)
옵션을 생략하면 기본적으로 이 모드로 동작합니다.
$ git reset HEAD~1
# 또는
$ git reset --mixed HEAD~1
- 상태: 커밋이 사라지고, 작업했던 파일들은 Unstaged(add 하기 전 상태)로 돌아갑니다.
- 활용: 작업 내용을 처음부터 다시 검토하거나, 부분적으로만 다시 add 하고 싶을 때 사용합니다.
③ 싹 다 지우고 싶을 때 (--hard) (주의!)
가장 강력하면서도 위험한 옵션입니다.
$ git reset --hard HEAD~1
- 상태: 커밋은 물론, 작업했던 코드까지 모두 사라집니다. 지정한 시점의 상태로 완벽하게 돌아갑니다.
- 활용: "이번 작업은 완전히 망쳤어! 그냥 전으로 돌아갈래." 할 때만 사용하세요.
2. 이미 팀원들과 공유했다면: git revert
이미 원격 저장소(GitHub, GitLab 등)에 push를 한 상태라면 reset을 쓰면 안 됩니다. 내 로컬의 history와 원격 저장소의 history가 달라져서 팀원들에게 혼란을 줄 수 있기 때문입니다.
이때는 "이 커밋의 내용을 반대로 수행하는 새 커밋"을 만드는 revert를 사용해야 합니다.
# 취소하고 싶은 커밋의 ID를 입력합니다.
$ git revert <커밋ID>
- 동작: 기존 커밋 내역은 그대로 두고, 취소 변경 사항이 담긴 새로운 커밋이 추가됩니다.
- 장점: history를 조작하지 않으므로 협업 시 안전합니다.
- 단점: 커밋 내역이 지저분해질 수 있습니다.
요약
| 상황 | 추천 명령어 | 내 코드(작업물) |
| 방금 커밋했는데 다시 하고 싶음 | git reset --soft HEAD~1 |
유지 (바로 commit 가능) |
| add 하기 전 상태로 가고 싶음 | git reset --mixed HEAD~1 |
유지 (다시 add 필요) |
| 작업 내용을 싹 날리고 싶음 | git reset --hard HEAD~1 |
삭제 (복구 불가) |
| 이미 GitHub에 올린 커밋 취소 | git revert <커밋ID> |
유지 (취소 커밋 생성) |
마치며
Git은 생각보다 안전 장치가 많습니다. 실수를 두려워하지 마세요!
오늘 정리해 드린 reset의 3가지 옵션과 revert의 차이점만 기억하신다면, 어떤 상황에서도 당황하지 않고 대처하실 수 있을 겁니다.
반응형
'IT > Git' 카테고리의 다른 글
| [Git] 다 쓴 브랜치 정리하기! 로컬 & 원격 브랜치 삭제 방법 (0) | 2026.03.07 |
|---|---|
| [Git] 지저분한 커밋 내역 하나로 합치기 (Squash 완벽 가이드) (0) | 2026.03.07 |
| [Git] 방금 한 커밋 되돌리기: git commit --amend 완벽 활용법 (0) | 2026.03.06 |
| [Git] 아차! 실수했다... 커밋 메시지 수정하는 법 (0) | 2026.03.05 |
| [Git] commit 메시지 작성법 7가지 (0) | 2026.03.05 |
Comments
