git reset과 git revert의 차이를 간단하게 설명해주는 만화가 있다. 참고하면 좋을듯 하다.
1. Reset - 시계를 과거로 돌리기(리셋하기)
- Reset은 되돌아가려는 버전 이후의 모든 변화들을 리셋시킨다.
- git reset [옵션] [커밋ID]
- git reset --hard [커밋ID]: 되돌아가려는 버전 이후의 모든 내용을 리셋시킨다. Staging Area, Repository, Working Tree 모두 리셋되기 때문에 사용에 주의를 요한다.
- git reset --mixed [커밋ID]: 버전은 되돌아갔지만 Working Tree는 그대로 남아있다. Repository, Staging Area는 리셋됐다.
- git reset --soft [커밋ID]: 버전은 되돌아갔지만 Staging Area와 Working Tree는 그대로 남아있다. Repository는 리셋됐다.
2. Revert - 특정 버전을 없었던 일로 만들기
- Revert는 Reset과 달리 되돌아가고자 하는 버전 이후의 모든 변화들을 되돌리는 것이 아니라, 버전 간의 변화만을 되돌린다.
- git revert [커밋ID]
예제
버전1: 1.txt를 작성
버전2: 2.txt를 작성
버전3: 3.txt를 작성
버전2를 검토하던 와중 2.txt에 문제가 있음을 알아냈고, revert로 되돌리고자 한다.
$git revert c8c7...(버전2의 커밋ID)
버전1 - 버전2 간의 변화(2.txt 작성)를 되돌렸다. 따라서 2.txt는 사라진다.
3. 그래서 언제 Reset 또는 Revert를?
Reset은 이력을 깔끔하게 해주는 장점을 지니지만, 모든 이력이 사라진다. 따라서 중간 버전을 이력에 남기고 싶으면 Revert를 사용한다. 또한 이미 원격 레포지토리에 push를 한 상태라면, conflict를 각오하고 Revert를 사용하도록 한다.
'Git' 카테고리의 다른 글
[Git] 원격 브랜치 관리2 (0) | 2021.08.18 |
---|---|
[Git] 원격 브랜치 관리1 (0) | 2021.08.06 |
[Git] .git 폴더 삭제 및 커밋 히스토리 초기화 (0) | 2021.02.19 |
[Git] 원격 저장소 - git remote update, git fetch, git pull 차이 (0) | 2021.02.17 |
[Git] Git 시작하기 - git init, git add, git commit, git log (0) | 2021.01.28 |