welcome to sisi's space! ‎ε(*⌒▽⌒)੭*゚¨゚゚・*:..☆

Dev & Study

[git] merge 되돌리는 방법

Sisi_ 2026. 3. 3. 01:08

이 글에서는 git merge를 잘못 했을 때, 되돌리는 방법을 다음 세 가지 상황으로 나누어 정리한다.

  1. merge commit을 만들었지만 아직 push하지 않은 경우
  2. 이미 push된 merge 
  3. 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