git revert
설명
- 특정 커밋을 되돌리기 위한 명령어
- 되돌리는 내용이 새로운 커밋으로 기록됨
- 기존의 커밋 기록은 변경되지 않음
- 협업 시 기록을 유지하면서 특정 변경 사항만 되돌릴 때 유용
사용 시나리오
- 협업 중일 때: 변경 내역을 되돌려야 하지만 Git 기록을 유지하고 충돌을 피하고 싶을 때.
- 배포된 코드에서: 안전하게 특정 기능을 롤백하고 싶을 때.
장점
- 기존 커밋 기록을 보존하여 투명한 기록 유지.
- 다른 팀원과의 충돌 위험이 낮음.
옵션
옵션 | 설명 | 예시 |
-n 또는 --no-commit | revert 결과를 Staging Area에만 적용하고 커밋하지 않음 | git revert -n <commit-hash> |
-m 또는 --mainline | 병합 커밋을 되돌릴 때 부모 커밋을 지정 (1번째 부모: 1, 2번째 부모: 2 등) | git revert -m 1 <merge-commit-hash> |
--edit | 기본값. 커밋 메시지 편집 모드를 활성화. 메시지 입력 없이 자동 커밋하려면 --no-edit 사용 | git revert --edit <commit-hash> |
--no-edit | 커밋 메시지 편집 없이 revert 실행 | git revert --no-edit <commit-hash> |
--quit | 현재 실행 중인 revert를 종료 | git revert --quit |
--abort | revert 도중 작업 중단 후 원래 상태로 되돌림 | git revert --abort |
사용 방법
git revert <commit-hash>
깃로그
revert 전
revert 후
git rebase
설명
- 브랜치의 커밋을 다른 브랜치로 이동시켜 Git 기록을 깔끔하게 정리
- 기존의 커밋 기록을 재작성(rewrite)하기 때문에 협업 중에는 주의가 필요
- 일반적으로 merge 대신 사용하여 선형 기록을 유지
사용 시나리오
- 로컬 작업 중일 때: 여러 커밋을 하나로 합치거나 커밋 기록을 정리하고 싶을 때.
- 작업 브랜치와 메인 브랜치의 기반을 일치시키고 싶을 때.
장점
- Git 기록을 깔끔하고 선형으로 유지.
- 병합 내역이 많을 때 가독성을 높임.
옵션
옵션 | 설명 | 예시 |
-i 또는 --interactive | 인터랙티브 모드로 실행하여 커밋을 합치거나, 수정, 삭제 가능 | git rebase -i <base-branch> |
--onto | 특정 커밋부터 다른 브랜치 위로 이동 | git rebase --onto <new-base> <upstream> <branch> |
--continue | 충돌 해결 후 Rebase를 계속 진행 | git rebase --continue |
--abort | Rebase 도중 작업 중단 후 원래 상태로 되돌림 | git rebase --abort |
--skip | 현재 충돌 난 커밋을 건너뛰고 Rebase 진행 | git rebase --skip |
--keep-empty | 내용이 없는 커밋도 포함하여 Rebase 진행 | git rebase --keep-empty <base-branch> |
--exec | 특정 명령어를 각 커밋에 대해 실행 | git rebase --exec 'npm test' <base-branch> |
사용 방법
git rebase <base-branch>
깃로그
rebase 전
rebase 후
revert vs rebase 차이
기능 | git revert | git rebase |
목적 | 특정 커밋을 되돌림 | 커밋을 재작성하여 기록 정리 |
기록 변경 여부 | 기존 기록 유지, 새로운 커밋 생성 | 기존 기록 변경 |
협업 환경에서 사용 | 안전함 | 주의가 필요함 (공유된 브랜치에서는 사용 자제) |
사용 시나리오 | 배포된 코드 롤백, 협업 중 특정 변경 취소 | 커밋 병합/정리, 브랜치 기반 업데이트 |
댓글