진행 중 작업의 방향성이 수정되면서 이전 commit으로 돌아가야 되는 귀찮음이 생겼다.
기존 작업물은 날려버리기 아까우니 잠시 다른 branch에 keep 하고 조금 멀리? 과거로 돌아가야 했다.
과거 여행 중의 기록을 commit으로 남기기 위해서 revert를 열심히 이용하였고 이름 남겨두려고 한다.
git revert 기본 사용법
git revert 커멘드의 기본 시그니쳐는 아래와 같다.
git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>…
git revert (--continue | --skip | --abort | --quit)
위 시그니쳐를 바탕으로 아주 간단한 예시를 들어보자.
특정 commit 직전 상태로 돌아가기
현재 HEAD의 바로 직전으로 돌아가기 위해서는 아래와 같이 사용하면 된다.
$ git revert
# or
$ git revert HEAD
특정 commit 직전 상태로 돌아가기 위해서는 아래와 같이 사용하면 된다.
단 돌아가고자 하는 commit과 HEAD 사이의 commit들은 변함없이 유지된다.
git revert <직전으로 돌아가고싶은 commit id>
아래 예시는 "revert test 1" commit ( 07a5cb37)직전으로 돌아가는 커멘드다.
$ git revert 07a5cb37
# or
$ git revert HEAD~2
"revert test 2" commit은 변화가 없는 것을 알 수 있다.
그럼 특정 commit으로 모든 내용을 순차적으로 되돌리고 싶으면 어찌해야 되는가? 아래 내용을 살펴보자.
특정 commit으로 순차적으로 돌아가기
git revert <돌아가고싶은 commit id>...
현재 HEAD가 위치해 있는 "revert test 3" commit을 "revert test 1" 커밋으로 되돌리고 싶다.
그러면 아래와 같이 돌아가고자 하는 commit id 혹은 상대 위치 뒤에 점 3개(...)를 붙이면 가능하다.
# "07a5cb37"는 "revert test 1" commit의 id 이다.
$ git revert 07a5cb37...
이와 같이 작성하면 순차적으로 commit 메시지를 남기며 되돌아갈 수 있다.
기본적으로 revert를 실행하면 commit 메시지 앞에 prefix로 "Revert"라는 단어가 붙는다.
이와 같은 결과를 낳을 수 있는 커멘드는 아래와 같다.
$ git revert HEAD~2...
되돌릴 commit 범위 지정하기
아래와 같이 점 2개(..)를 사이에 두고 되돌리기 끝 점과 시작 점의 commit id를 작성하면 범위 지정도 가능하다.
git revert <되돌리기 끝 commit id>..<되돌리기 시작 commit id>
예시는 아래와 같다.
# 예시 1
$ git revert e4cd6791..HEAD
# 예시 2
$ git revert 262d70bc..e4cd6791
git revert의 유용한 옵션
revert를 사용하면서 지극히 개인적으로 편리하다 느낀 옵션들이 있다.
--no-edit
특정 commit까지 순차적으로 revert 혹은 범위를 지정해서 revert를 진행할 때는 각각 commit에 대한 revert 내용을 기록할 수 있도록 editor가 동작한다. 어차피 esc+:wq 를 연타를 할 것이며 commit 메시지에 "Revert"라는 prefix 메시지가 붙어도 상관없다면 해당 옵션을 사용해도 좋을 것 같다.
--no-commit
해당 옵션을 사용하면 revert에 대한 commit까지 완료가 되지 않고 변경 사항만 stage에 올라가게 된다. 이 방식은 변경 사항에 대해 수정이 가능하고 commit 메시지도 내가 원하는 방식으로 작성이 가능하다.
더 다양한 옵션은 아래 링크에서 참고 😊
협업 과정에서는 작업 과정과 작업물에 대한 투명성이 중요하다고 생각이 된다.
기획의 변경 혹은 실수에 의해 commit을 되돌릴 때 위험을 감수하며 보이지 않는 reset을 사용하는 것보다는(당연 reset도 다시 reset이 가능하지만) 되돌아가는 과정도 commit으로 남길 수 있는 revert를 사용하여 기록을 하는 것이 좋게 보이는 듯하다.
'ETC > Git' 카테고리의 다른 글
[git] 직전 commit 수정, git commit --amend (0) | 2024.11.03 |
---|