밤톨코딩
[GIT] revert 명령어를 사용해서 이전 버전으로 돌려보자. 본문
반응형
🍭 Git revert 이란?
git revert는 Git에서 커밋의 변경 내용을 되돌리는 데 사용되는 명령어이다.
기존의 커밋 기록은 유지하면서, 특정 커밋의 변경 사항을 반대로 적용하여 새로운 커밋을 생성한다.
이는 기존 기록을 삭제하거나 덮어쓰지 않기 때문에 "안전한 되돌리기" 방법으로 취급된다.
📌 revert 사용법
기본 사용법
git revert [옵션] 취소_대상_커밋해시
주요 옵션
| 옵션 | 설명 |
| -n 또는 --no-commit | - 되돌리는 작업은 수행하지만, 새로운 커밋은 생성하지 않고, 변경 사항이 staging area에만 적용된다. - 이후 변경 사항을 확인하거나 수동으로 커밋이 가능하다. |
| -m 부모번호 | - 머지 커밋을 되돌릴 때 사용되며, 부모 중 어떤 것을 기준으로 되돌릴 것인지 지정한다. - merge 항목에서 첫번째가 1이고 두번째가 2이다. |
| --edit | - 되돌린 커밋을 생성할 때 커밋 메시지를 편집할 수 있도록 에디터를 활성화시킨다. - 기본 동작이므로 명시적으로 지정하지 않아도 작동한다. |
| --no-edit | - 커밋 메시지를 편집하지 않고, 기본 메시지를 그대로 사용한다. |
| --signoff | - 되돌린 커밋 메시지에 서명(Signed-off-by)을 추가한다. - 협업 프로젝트에서 커밋 서명을 요구하는 경우 유용하다. |
| -s 또는 --strategy 병합전략 | - 되돌릴 때 사용할 병합 전략을 지정한다. - 일반적으로 충돌이 발생할 수 있는 상황에서 유용한다. - 사용 가능한 병합 전략은 'resolve', 'recursive', 'octopus', 'ours', 'subtree' 등이 있다. |
| --strategy-option=병합전략 | - 선택한 병합 전략에 대한 추가 옵션을 설정한다. - 예를 들어, 'recursive' 병합 전략에서 'ours' 옵션을 지정 가능하다. |
| --mainline 부모번호 | - '-m'과 유사하며, 머지 커밋을 되돌릴 때 사용한다. - 되돌릴 때 기준으로 사용할 부모 커밋을 지정한다. |
| --quit | - 중단된 'git revert' 작업을 종료하고, 재시작 정보를 삭제한다. - 이전에 시작된 'git revert' 작업이 있을 때 유용한다. |
| --abort | - 충돌이 발생한 git revert' 작업을 중단하고, 변경 내용을 원래 상태로 되돌린다. |
| --continue | - 충돌이 해결된 후 'git revert' 작업을 이어서 진행한다. |
1️⃣ 사용 예시 1
'git log'를 실행하여 커밋 히스토리를 확인했을 때, a → b → c → d 순으로 커밋을 진행하였다.
'b' 커밋으로 되돌리기 위해서는 'd'와 'c'를 revert 진행한다.
Log 확인
git log
d - 커밋 메시지 D
c - 커밋 메시지 C
b - 커밋 메시지 B
a - 커밋 메시지 A
revert 진행
git revert d_커밋_해시
git revert c_커밋_해시
push 진행
- 필요시, 로컬 브랜치에서 revert가 완료되었으면 원격 브랜치에 푸시를 진행한다.
git push origin 브랜치명
2️⃣ 사용 예시 2
'c' 커밋은 'feature' 브랜치에서 작업한 내용이며, 'd'는 'main' 브랜치와 'feature' 브랜치를 병합(merge)한 커밋이다.
여기에서 'd'를 되돌리려고 한다.
'd' 커밋을 되돌릴 때 '-m' 옵션이 필요한데, 머지 커밋이 두 개 이상의 부모를 가지고 있기 때문에 '-m' 옵션으로 어느 부모를 기준으로 되돌릴지 지정이 필요하다.
Log 확인
git log
* d (머지 커밋)
|\
| * c (feature 브랜치)
|/
* b (main 브랜치)
* a
revert 진행
# main 브랜치로 되될리는 경우
git revert -m 1 머지_커밋_해시
# feature 브랜치로 되돌리는 경우
git revert -m 2 머지_커밋_해시
🕹️ git revert vs git reset
- git revert : 기존 커밋 히스토리를 보존하며, 되돌리려는 커밋의 반대 작업을 새 커밋으로 생성하기 때문에 비교적 안전하며 협업에 적합하다.
- git reset : 지정된 커밋 이후의 기록을 제거하거나 스테이징 상태로 되돌린다. 히스토리가 변경되므로 주의가 필요하며, 일반적으로 협업 환경에서는 사용하지 않는 것이 좋다.
반응형