본문 바로가기
카테고리 없음

[git] revert와 rebase의 차이 / commit 되돌리기

by Enhydra lutris 2024. 12. 3.

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
목적 특정 커밋을 되돌림 커밋을 재작성하여 기록 정리
기록 변경 여부 기존 기록 유지, 새로운 커밋 생성 기존 기록 변경
협업 환경에서 사용 안전함 주의가 필요함 (공유된 브랜치에서는 사용 자제)
사용 시나리오 배포된 코드 롤백, 협업 특정 변경 취소 커밋 병합/정리, 브랜치 기반 업데이트

댓글