이 글에서는 git merge를 잘못 했을 때, 되돌리는 방법을 다음 세 가지 상황으로 나누어 정리한다.
- merge commit을 만들었지만 아직 push하지 않은 경우
- 이미 push된 merge
- merge 진행 중(commit 전)인 상태
1. merge 했지만 아직 push하지 않은 경우
remote에 반영되지 않았기 때문에 히스토리를 되돌려도 문제가 없다. 이때는 git reset을 해주자.
git reset --hard HEAD~1
- HEAD~1 → 바로 이전 커밋으로 이동
- --hard → 워킹 디렉토리와 staging area까지 모두 되돌림
- merge commit 자체를 삭제하는 것임
주의: --hard는 워킹 디렉토리 변경사항까지 모두 삭제하므로
- merge 이후 추가 작업을 한 경우
- 아직 commit하지 않은 수정사항이 있는 경우
에는 사용하면 안 된다. 작업 내용까지 사라질 수 있다.
2. 이미 push된 merge
이 경우에는 reset을 하면 안 된다. 이유는 히스토리가 바뀌기 때문이다. 이미 다른 사람이 pull했을 가능성이 있기 때문에 히스토리를 수정하는 대신 merge를 취소하는 새로운 commit을 만들어야 한다.
이때 사용하는 명령이 git revert다.
git revert -m 1 <merge-commit>
-m 1: merge 커밋의 첫 번째 부모(현재 브랜치) 기준으로 되돌림
merge commit은 부모가 두 개다. 다음 예시에서 M이 merge commit이다.
예시:
main
A --- B --- M
\ /
C-D
즉
- main 브랜치 기준으로 merge 취소
- merge 이전 상태로 되돌리는 commit 생성
결과:
A --- B --- M --- revert commit
merge 기록은 남고, 결과만 취소된다. 협업 브랜치에서는 이 방법이 안전하다.
3. merge 도중 (아직 commit 전)
merge 충돌이 발생했거나 merge 도중 취소하고 싶다면 다음 커맨드를 사용하자.
git merge --abort
- merge 시작 전 상태로 복구
- 충돌 파일 상태 제거
- index 복원
-> merge 자체를 없던 일로 만들어줌
MERGING 상태에서 Git 명령이 막히는 이유
merge 진행 중일 때 Git은 MERGING 상태가 된다. 이 상태에서는 다음 명령이 대부분 실행되지 않는다.
git pull
git merge <branch>
Git 입장에서는 아직 merge가 끝나지 않았기 때문이다. 따라서 merge를 완료 또는 취소 시켜줘야 한다.
merge 완료:
git commit
merge 취소:
git merge --abort
'Dev & Study' 카테고리의 다른 글
| [npm] npm uninstall, 패키지 제거 방법 (0) | 2026.03.03 |
|---|---|
| [Next.js] App Router에서 "use client"란 (0) | 2026.03.03 |
| [npm] peerDependency strictness란 (0) | 2026.03.03 |
| [git] stash: 브랜치 이동 시, 하던 작업을 잠시 치워두는 법 (0) | 2026.03.02 |
| Next.js가 삭제된 파일을 계속 참조하는 문제 (.next 캐시 삭제 방법) (0) | 2026.03.02 |