Git Revert (vs Git Reset)
깃 커밋을 잘못하는 경우가 종종 있습니다.
급한 마음에 또는 깜빡하고 최신 깃 기록을 내려받지 않고 바로 커밋을 하는 경우가 있죠.
그래서 오늘은 git revert 및 git reset 을 통해 기존 커밋의 내용을 취소하거나 되돌리는 방법에 대해서 알아보겠습니다.
특징 | git revert | git reset |
---|---|---|
기능 | 특정 커밋의 변경 사항을 되돌리고 새로운 커밋을 생성 | 특정 커밋을 기준으로 브랜치를 이전 상태로 이동 |
히스토리 보존 | 보존 | 보존 안됨 |
협업 시 사용 | 안전하게 사용 가능. 히스토리가 보존되므로 팀원이 영향을 받지 않음 | 조심해야 함. 원격 저장소와 동기화된 상태에서 사용하면 충돌이 발생할 가능성이 큼 |
원격 저장소 동기화 | 원격 저장소와의 동기화를 깨지지 않게 함 | 원격 저장소에서 제거된 히스토리로 인해 문제가 발생할 수 있음 |
작동 방식 | 되돌리려는 커밋의 변경 사항을 반대로 적용하여 새 커밋으로 기록 | 브랜치를 특정 커밋으로 재설정하거나 히스토리를 삭제 |
사용 사례 | 원격 저장소에 푸시된 커밋을 되돌려야 하는 경우 | 로컬에서만 작업 중이며, 히스토리를 수정하거나 초기화할 때 사용 |
그림
- git revert
#### Initial: A — B — C — D (HEAD)
#### Revert D: A — B — C — D — Revert D (HEAD)
커밋 내용:
- A: 파일 file.txt 생성, 내용: Hello.
- B: file.txt에 World 추가.
- C: file.txt에 ! 추가.
- D: file.txt에 Oops 추가.
A: file.txt = Hello
B: file.txt = Hello World
C: file.txt = Hello World!
D: file.txt = Hello World! fail
Revert D: file.txt = Hello World!
- git reset
#### Initial: A — B — C — D (HEAD)
#### Reset to C: A — B — C (HEAD)