Menu
Coddy logo textTech

Git: 커밋 취소하기

마지막 업데이트

커밋을 취소하는 방법은 어떤 커밋인지, 그리고 이미 푸시했는지에 따라 달라집니다. 히스토리 깊숙이 묻힌 오래된 커밋이나 이미 공유된 커밋에는 git revert가 필요합니다. 아무것도 다시 쓰지 않고 해당 커밋을 되돌리는 새 커밋을 추가하기 때문입니다. 최근의 로컬 커밋 여러 개는 git reset으로 간단히 되돌려 버릴 수 있습니다. 가장 최근 커밋 하나만 취소하면 된다면, git 마지막 커밋 되돌리기 페이지가 그 빠른 해결법의 모든 변형을 다룹니다.

터미널 플레이그라운드에서 이것들을 사용해 보세요. 브라우저 안의 진짜 셸이며, 설치할 것이 없습니다.

어떤 명령을 사용할지

SituationCommand
오래된 커밋 하나만 취소, 그 이후 커밋은 모두 유지git revert <hash>
이미 푸시한 커밋 취소하기git revert <hash>
마지막 로컬 커밋 3개 취소, 작업은 유지git reset --soft HEAD~3
마지막 로컬 커밋 3개 취소, 작업도 버리기git reset --hard HEAD~3
범위를 새 역방향 커밋으로 취소git revert HEAD~3..HEAD

reset vs revert

Behaviorgit resetgit revert
히스토리를 다시 씀아니오
푸시된 커밋에서 안전함아니오
새 커밋을 생성함아니오
히스토리 중간의 오래된 커밋에 사용 가능아니오
변경 사항을 버릴 수 있음예 (--hard)아니오

실전 예제

이미 푸시된 커밋이라도, 그 뒤에 온 커밋들은 건드리지 않고 특정 오래된 커밋만 취소합니다.

StepCommandResult
1git log --oneline잘못된 커밋의 해시를 찾음 (예: a1b2c3d)
2git revert a1b2c3d새 커밋이 그것을 되돌리고, 이후 커밋은 그대로 유지됨
3git push수정 사항을 공유함 - 히스토리는 다시 쓰이지 않음

Git 커밋 취소 FAQ

이후 커밋을 잃지 않고 오래된 커밋을 취소하려면?
git revert <hash>를 사용하세요. revert는 지정한 커밋 하나만 되돌리는 새 커밋을 만들며, 그 이후의 모든 커밋은 정확히 그대로 유지됩니다. 먼저 git log --oneline으로 해시를 찾으세요. revert가 이후 변경 사항과 충돌하면 Git이 일시 중지하므로, 해결한 뒤 git revert --continue를 실행하면 됩니다.
여러 커밋을 한 번에 취소하려면?
로컬에만 있는 커밋이라면 git reset --soft HEAD~3이 마지막 세 커밋을 제거하면서 변경 사항은 스테이지된 상태로 유지합니다(버리려면 --hard). 푸시된 커밋이라면 대신 범위를 revert하세요. git revert --no-commit HEAD~3..HEAD가 세 커밋을 모두 되돌리고, 그다음 git commit 한 번으로 취소가 기록됩니다.
이미 푸시한 커밋을 취소하려면?
reset 대신 git revert <hash>를 사용하세요. revert는 대상 커밋의 변경 사항을 되돌리는 새 커밋을 만들고 히스토리는 그대로 둡니다. 이것이 공유된 커밋을 취소하는 안전한 방법입니다. reset으로 푸시된 히스토리를 다시 쓰면 다른 모두가 자신의 복사본을 다시 맞춰야 합니다.
언제 reset을 쓰고 언제 revert를 써야 하나요?
커밋이 오직 내 것이고 아직 로컬에만 있다면 reset을 쓰세요. 브랜치를 뒤로 옮겨 마치 그 커밋들이 없었던 것처럼 만듭니다. 커밋이 푸시되었거나, 공유되었거나, 히스토리 중간에 있다면 revert를 쓰세요. 모두가 안전하게 pull할 수 있는 새 커밋으로 변경 사항을 되돌립니다.
이것을 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열어 브라우저 안의 진짜 셸에서 이 명령들을 실행하세요. 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌도 변경 사항 취소를 단계별로 다룹니다.
Coddy programming languages illustration

Coddy로 Git 배우기

시작하기