본문 바로가기
Git/with Remote

Git revert

by BAYABA 2021. 10. 23.
  1. 개인 공부 목적으로 작성한 글입니다.
  2. 아래 출처를 참고하여 작성하였습니다.

목차

  1. revert란
  2. revert 사용 방법
  3. Merge Commit을 이전 커밋으로 되돌리기

1. revert란

  1. 이전 커밋으로 돌아가는 방법입니다.
  • 단, 중요한 특징은 '이전 버전으로 되돌아갔다'라는 이력을 생성하며 커밋 번호가 올라간다는 점입니다.
  • 즉, 논리적으로 실제 내용은 이전으로 돌아갔어도, 커밋 이력은 하나 더 늘어난다는 특징이 있습니다.
  1. revert가 필요한 이유는, 모두가 함께 쓰는 브랜치라 이력 관리가 중요하다면 변경 사항을 쥐도 새도 모르게 없애는 것보다는 '변경사항을 되돌렸다'는 새로운 커밋을 만드는 게 더 낫기 때문입니다.

2. revert 사용 방법

  1. 커밋 한 개 되돌리기
$ git revert ${COMMIT_NUBMER}

//자동으로 커밋을 진행하고 싶지 않다면 --no-commit 옵션으로
$ git revert ${COMMIT_NUBMER} --no-commit

//커밋 메시지 자동으로 생성
$ git revert ${COMMIT_NUBMER} --no-edit

  1. 여러 개 커밋 한 번에 되돌리기
$ git revert [되돌릴 커밋 hash]..[되돌릴 커밋 hash]

3. Merge Commit을 이전 커밋으로 되돌리기

  1. 문제가 되는 건 Merge 커밋을 되돌릴 때 입니다.
  • 그냥 revert 옵션을 적용하면 아래와 같은 에러 메시지가 나옵니다.
$ git revert 6babfa4
error: Commit 6babfa43e22010e7504a3bd658faa8e5e21f9f8e is a merge but no -m option was given.
fatal: revert failed

  1. 위와 같은 에러 메시지가 나오는 이유는, revert 대상이 커밋 여러 개가 만나는 커밋이기 때문입니다.
  2. revert를 하려면 어떤 커밋으로 돌아갈지 결정해야 합니다.
  3. 즉, A와 B 커밋을 merge 해 C 커밋을 만들었다면 A 혹은 B 커밋으로 revert해야 합니다.
  4. 커밋이력을 확인해보면 Merge 커밋의 부모 커밋을 알 수 있습니다.
  • 빨간색 Box로 되어 있는 커밋 번호가 1번 부모입니다.
  • 파란색 Box로 되어 있는 커밋 번호가 2번 부모입니다.


  1. 결론은 Merge Commit을 이전으로 되돌리려면 아래와 같이 -m 옵션과 돌아갈 부모커밋을 적어줍니다.
//1번 parent를 선택하는 경우
$ git revert ${COMMIT_NUMBER} -m 1

//2번 parent를 선택하는 경우
$ git revert ${COMMIT_NUMBER} -m 2

출처

  1. #git merge 커밋 리버트(revert)
  2. [Git] commit 또는 push된 내용 되돌리기(reset, revert)
  3. Outsider's Dev Story