Git Revert
마지막 업데이트
git revert는 변경 사항의 역을 적용하는 새 커밋을 생성하여 커밋을 되돌립니다. 히스토리를 다시 쓰는 대신 히스토리를 추가하기 때문에, revert는 이미 푸시된 커밋을 되돌리는 안전한 방법입니다. git reset과 달리 다른 모두에게 다시 쓰인 브랜치를 맞추도록 강요하지 않습니다.
터미널 플레이그라운드에서 이 명령어들을 사용해 보세요. 브라우저 안의 진짜 셸이며, 설치할 것은 없습니다.
문법
| Command | What it does |
|---|---|
git revert HEAD | 가장 최근 커밋을 되돌립니다 |
git revert <hash> | 해시로 특정 커밋을 되돌립니다 |
git revert HEAD~2..HEAD | 커밋 범위를 되돌립니다 |
git revert -n <hash> | 되돌리지만 아직 커밋하지 않습니다(스테이징만) |
git revert -m 1 <merge-hash> | 부모 1을 유지하며 머지 커밋을 되돌립니다 |
revert 진행 중
revert가 충돌에 부딪히면 이를 해결하고 계속하세요.
| Command | What it does |
|---|---|
git revert --continue | 충돌을 해결한 후 재개합니다 |
git revert --abort | 진행 중인 revert를 취소합니다 |
git revert --skip | 현재 커밋을 건너뛰고 계속합니다 |
revert vs reset
| Behavior | git revert | git reset |
|---|---|---|
| 히스토리를 다시 씀 | 아니요 | 예 |
| 푸시된 커밋에서 안전함 | 예 | 아니요 |
| 새 커밋을 생성함 | 예 | 아니요 |
| 중간의 커밋을 되돌림 | 예 | 번거로움 |
git revert 자주 묻는 질문
git revert와 git reset의 차이점은 무엇인가요?
git revert는 이전 커밋의 변경 사항을 되돌리는 새 커밋을 추가하며 히스토리를 그대로 유지합니다. 이미 푸시한 커밋에 안전합니다. git reset은 브랜치 포인터를 뒤로 옮기고 히스토리를 다시 쓰는데, 로컬 커밋에는 괜찮지만 공유 브랜치에서는 위험합니다. 공개된 커밋을 되돌릴 때는 revert를, 로컬 커밋을 되돌릴 때는 reset을 사용하세요.이미 푸시된 커밋은 어떻게 되돌리나요?
git revert <hash>(가장 최근 것은 git revert HEAD)를 실행한 다음 새 revert 커밋을 푸시하세요. revert는 히스토리를 다시 쓰지 않으므로 공유된 커밋을 되돌리는 올바른 방법입니다. force-push가 필요 없고 이미 그것을 풀한 팀원에게 지장을 주지 않습니다.머지 커밋은 어떻게 되돌리나요?
머지 커밋에는 부모가 둘 있으므로 Git은 어느 히스토리 라인을 유지할지 알아야 합니다.
git revert -m 1 <merge-hash>를 사용하세요. 여기서 -m 1은 Git에게 첫 번째 부모(보통 머지 대상 브랜치)를 유지하도록 지시합니다. 머지를 되돌리면 병합된 변경 사항은 취소되지만 머지 자체는 히스토리에 남습니다.여러 커밋을 한 번에 되돌릴 수 있나요?
예. 최근 두 커밋을 되돌리려면
git revert HEAD~2..HEAD 같은 범위를 전달하거나 여러 해시를 나열하세요. Git은 기본적으로 되돌린 커밋마다 하나의 revert 커밋을 만듭니다. -n을 추가하면 커밋하지 않고 모든 되돌림을 스테이징한 뒤 직접 하나의 커밋을 만들 수 있습니다.이것을 온라인에서 연습할 수 있나요?
예. 터미널 플레이그라운드를 열어 브라우저 안의 진짜 셸에서
git revert를 실행하세요. 설치할 것은 없습니다. Coddy의 무료 인터랙티브 Git 코스에서도 변경 사항 되돌리기를 단계별로 다룹니다.