Revert

Violet_Evgadn·2023년 9월 7일
0

Git

목록 보기
25/33
post-custom-banner

Revert

Revert란?

실수로 수행한 커밋이 아니라면 대부분의 커밋을 취소하는 데에는 이유가 있을 것이다.
예를 들어 A라는 기능을 개발한 후 커밋 했는데 보안이나 법적인 문제로 해당 기능을 삭제해야 한다면 해당 커밋을 삭제해야 할 것이다.

이러한 커밋을 취소하는 과정 또한 중요한 업무 과정 중 하나이다.
협업을 조금 더 원활히 하기 위해선 이런 커밋을 취소했다는 것도 기록에 남기면서 커밋을 삭제하고 싶을 것이다.

이를 위한 기능이 바로 "리버트(Revert)"이다.

리버트는 커밋을 삭제시키며 기록을 남기지 않는 "Reset"과는 달리 커밋을 삭제했다는 기능까지 남기는 "되돌리기 기능(Ctrl + Z)"이다.

실무를 수행할 땐 대부분 커밋을 수행하기 전 많은 고민을 할 것이고 커밋 삭제 시에는 외부적 요인이 있을 가능성이 크므로 Revert가 (Reset보다) 유용한 경우가 많을 것이다.

정말로 강조하는 내용인데 협업을 하는 원격 저장소에서는 절대 Git Reset을 활용하지 말자.
Git Reset은 언제나 혼자만 사용하는 브랜치에서나 수행하는 동작이다. 왜냐하면 --hard 옵션을 사용할 경우 복구하기가 힘들기 때문에 만약 다른 사람과 같이 활용하는 브랜치에서는 커다란 문제를 가져올 수도 있다.


IntelliJ에서의 Revert

0. Revert 시킬 커밋 생성

필자는 "실수로 수행해버린 커밋"이라는 문구를 추가한 뒤 커밋을 생성했다.

1. Git Log > Revert 하고 싶은 커밋 선택 > 마우스 오른쪽 클릭


여러 선택지 중 Revert Commit 버튼을 클릭하자.

2. Git Log & 결과 확인

Revert "Git Revert 테스트 커밋"이라는 Log가 추가되었으며 추가했던 문구가 삭제되었음을 확인할 수 있다.
즉, 0번 과정에서 생성한 커밋의 변경 사항이 취소됨과 동시에 Revert를 통해 커밋 삭제 과정이 Log 상에도 남았음을 알 수 있다.


CLI를 통한 Revert

git revert [Option] [커밋 ID]

명령어 설명

git reset과 마찬가지로 커밋 ID를 입력하면 커밋 ID에 해당하는 커밋을 Revert 시킬 것이다.
git revert에서 사용한 HEAD^HEAD~<숫자> 또한 커밋 ID 자리에 입력함으로써 사용할 수 있다.

하지만 이전에 말했듯 필자는 HEAD 사용을 그렇게 좋아하지 않으므로 앞으로는 커밋 ID만 명령어에서 활용하도록 하겠다.

Option

git revert --no-commit [커밋 ID]

Revert 한 결과를 바로 Commit 시키고 싶지 않을 때 사용하는 명령어이다.

IntelliJ에서 Revert를 시키면 Revert "Git Revert 테스트 커밋"라는 커밋 메시지가 자동으로 생긴 뒤 바로 커밋 됨을 알 수 있다.

하지만 Revert 시 생기는 커밋의 메시지도 개발자가 직접 입력하고 싶을 수 있다.
이때 --no-commit 옵션을 활용해 Revert 결과를 Staging만 시키고 커밋 하지 않을 수 있다.

(이후 git commit -m "커밋 메시지"를 통해 Revert 시 생성되는 커밋의 메시지를 입력할 수 있을 것이다)

git revert [커밋ID1]..[커밋ID2]

여러 개의 커밋을 한 번에 Revert 시킬 수도 있다.

[커밋ID1]..[커밋ID2]를 입력하면 커밋 ID1에 해당하는 커밋부터 커밋ID2에 해당하는 커밋까지 모두 Revert 된다.
이때 Revert는 "커밋 ID2"를 가진 커밋부터 취소시키기 때문에 이 점을 고려하여 커밋ID1과 커밋ID2를 지정하도록 하자.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!
post-custom-banner

0개의 댓글