IT/기초 지식

git revert

개발자 두더지 2026. 1. 6. 22:20
728x90

※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.

 

 

revert란?


기존 커밋을 취소하기 위한 명령어로,「취소하고 싶은 커밋을 취소하는 커밋을 새롭게 작성한다」라고 하는 처리로 기존의 커밋을 취소한다.
새로 커밋을 추가하고 있을 뿐이지 기존 커밋의 이력이 사라지는 것은 아니다(커밋 로그를 보시면 남아있다).
어떤 변경이 있었는가 하는 것이 (revert한 것을 포함하여) 남기 때문에 원격으로 push되어 공개되어 있는 커밋에 대해서도 안전하게 사용할 수 있다.

'기존 커밋을 원래대로 되돌린다'는 점에 대해서 비슷한 기능을 가진 명령어에 reset이 존재한다.
다만, reset 명령어의 경우 커밋을 취소했다는 커밋이 남지 않는다는 차이가 있다. 따라서 리모트에 push가 되어 공개되어 있는 커밋에 관해서 사용하는 것은 좋지 않다.

또한 revert 명령어는 특정 커밋을 원래대로 되돌리는 명령어이기도 하다.
지정한 커밋 이후에 행해진 처리를 모두 되돌리는(이 기능은 reset 명령어에 해당됨) 것은 아니다.

 

커맨드


특정 커밋을 취소하기

$ git revert <commit>

커밋 ID를 지정함으로써 그 커밋을 취소하는 커밋이 새롭게 추가된다.
코드는 해당 커밋이 없었을 때의 상태가 된다.
revert 명령을 실행하면 에디터가 열려 커밋 메시지를 편집할 수 있다.

 

커밋메시지 편집

revert 커밋을 실시할 때, 커밋 메시지의 편집을 실시할지 말지를 옵션으로 지정할 수 있다.

커밋 메시지를 편집할 경우

$ git revert <commit> -e 

or

$ git revert <commit> --edit

커밋 메시지를 편집하지 않을 경우

$ git revert <commit> --no-edit

 

커밋하지 않기

revert 명령어를 사용하면 commit까지 행해지지만 index에 되돌리기만 하면 commit을 행하지 않도록 할 수도 있다.
이 옵션을 사용할 경우 여러 커밋을 revert할 때 한번에 커밋할 수 있어 편리하다.

$ git revert <commit> -n

or

$ git revert <commit> --no-commit

 

머지 커밋

머지 커밋을 취소하려고 할 경우 병합한 2개의 커밋(부모) 중 어느 쪽으로 되돌릴 것인지 지정해야 한다.
-m옵션 뒤로 되돌리려는 부모를 숫자(기본적으로 1 혹은 2)로 지정하고 revert를 실행한다.

$ git revert -m 1 <commit>

참고로 git show 명령어나 git log 명령어로 대상 머지커밋을 보면 부모의 숫자(1 혹은 2)를 알 수 있다.

$ git show
commit xyz
Merge: 1a1a1a 2b2b2b    #여기를 주목
Author: xxxx xxxx
Date:   Thu Jul 13 09:00:00 2017 +0000

    Merge commit

revert 하고 싶은 머지커밋이 이 xyz라고 하는 번호의 커밋이라고 가정하자.
이 머지 커밋은 '1a1a1a'라는 커밋에 '2b2b2b'라는 커밋이 병합되어 생긴 것이다(#여기를 주목 부분).

번호는 로그를 표시했을 때 'Merge:'라고 하는 행에 쓰여져 있는 순서대로 1, 2가 된다.
다시 말해 이 경우는, 「1a1a1a」가 번호 1, 「2b2b2b」는 번호 2가 된다.

 

 

참고자료

https://qiita.com/chihiro/items/2fa827d0eac98109e7ee

728x90