- 개인 공부 목적으로 작성한 글입니다.
- 아래 출처를 참고하여 작성하였습니다.
목차
- revert란
- revert 사용 방법
- Merge Commit을 이전 커밋으로 되돌리기
1. revert란
- 이전 커밋으로 돌아가는 방법입니다.
- 단, 중요한 특징은 '이전 버전으로 되돌아갔다'라는 이력을 생성하며 커밋 번호가 올라간다는 점입니다.
- 즉, 논리적으로 실제 내용은 이전으로 돌아갔어도, 커밋 이력은 하나 더 늘어난다는 특징이 있습니다.
- revert가 필요한 이유는, 모두가 함께 쓰는 브랜치라 이력 관리가 중요하다면 변경 사항을 쥐도 새도 모르게 없애는 것보다는 '변경사항을 되돌렸다'는 새로운 커밋을 만드는 게 더 낫기 때문입니다.
2. revert 사용 방법
- 커밋 한 개 되돌리기
$ git revert ${COMMIT_NUBMER}
//자동으로 커밋을 진행하고 싶지 않다면 --no-commit 옵션으로
$ git revert ${COMMIT_NUBMER} --no-commit
//커밋 메시지 자동으로 생성
$ git revert ${COMMIT_NUBMER} --no-edit
- 여러 개 커밋 한 번에 되돌리기
$ git revert [되돌릴 커밋 hash]..[되돌릴 커밋 hash]
3. Merge Commit을 이전 커밋으로 되돌리기
- 문제가 되는 건 Merge 커밋을 되돌릴 때 입니다.
- 그냥 revert 옵션을 적용하면 아래와 같은 에러 메시지가 나옵니다.
$ git revert 6babfa4
error: Commit 6babfa43e22010e7504a3bd658faa8e5e21f9f8e is a merge but no -m option was given.
fatal: revert failed
- 위와 같은 에러 메시지가 나오는 이유는, revert 대상이 커밋 여러 개가 만나는 커밋이기 때문입니다.
- revert를 하려면 어떤 커밋으로 돌아갈지 결정해야 합니다.
- 즉, A와 B 커밋을 merge 해 C 커밋을 만들었다면 A 혹은 B 커밋으로 revert해야 합니다.
- 커밋이력을 확인해보면 Merge 커밋의 부모 커밋을 알 수 있습니다.
- 빨간색 Box로 되어 있는 커밋 번호가 1번 부모입니다.
- 파란색 Box로 되어 있는 커밋 번호가 2번 부모입니다.
- 결론은 Merge Commit을 이전으로 되돌리려면 아래와 같이 -m 옵션과 돌아갈 부모커밋을 적어줍니다.
//1번 parent를 선택하는 경우
$ git revert ${COMMIT_NUMBER} -m 1
//2번 parent를 선택하는 경우
$ git revert ${COMMIT_NUMBER} -m 2
출처
'Git > with Remote' 카테고리의 다른 글
원격 저장소 브랜치 삭제 (delete remote branch) (0) | 2021.10.10 |
---|---|
원격 저장소에 올라간 커밋 제거 (0) | 2021.10.10 |
Remote Branch 가져오기 (master 제외) (0) | 2021.10.10 |