일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 막내의막무가내 플러터
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 코볼 COBOL
- 프로그래머스 알고리즘
- 막내의막무가내 안드로이드
- 부스트코스에이스
- 주엽역 생활맥주
- 막무가내
- 안드로이드 Sunflower 스터디
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 안드로이드 에러 해결
- flutter network call
- 막내의막무가내 프로그래밍
- 막내의막무가내 코틀린
- 막내의막무가내 rxjava
- Fragment
- 안드로이드 sunflower
- 프래그먼트
- 막내의막무가내
- 막내의막무가내 플러터 flutter
- 막내의 막무가내
- 막내의막무가내 SQL
- 막내의막무가내 일상
- 안드로이드
- 부스트코스
- 2022년 6월 일상
- 막내의 막무가내 알고리즘
- 막내의막무가내 목표 및 회고
- 주택가 잠실새내
- 막내의막무가내 알고리즘
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[Git] Reset, Revert 차이 간략정리 본문
프로젝트를 하다가 revert를 사용하게 되었는데 그러면서 둘의 차이점에 대해 알아보게 되었습니다.
깃 커밋을 잘못해서 되돌려야하는 경우가 있습니다. 그 경우에 reset 과 revert 명령어를 사용하게 됩니다.
이 둘의 차이점에 대해 아주 간단하게 정리해볼려고 합니다.
우선 둘 다 과거 커밋을 건드리는 작업입니다. (잘 못 건드리면 유희왕 시간의 마술사 효과처럼 지금까지 개발한 것들이 다 날라가거나 고칠 수 없는 지옥을 맛 볼수 있습니다.)
commit을 특정사건으로 표현하겠습니다.
차이점은 reset은 시간을 과거의 특정 사건으로 되돌린다고 생각하고 revert는 현재에 있으면서 과거 특정 사건들만을 없던 일로 만드는 거라고 생각하면 이해하기 쉽습니다.
[Reset]
reset은 특정 사건으로 되돌아가게 되는데 과거로 되돌아 갔으니 해당 사건 이후의 사건들은 모두 사라집니다. reset이란 뜻과 일맥상통합니다.
그리고 reset은 과거의 이력이 커밋에 안남고 깔끔히 과거로 돌아가지만 revert는 특정 사건을 revert 했다는 이력이 커밋에 남게 됩니다.
깃 명령어는 다음과 같습니다. 깃 크라켄이나 개발툴로 GUI로 더 쉽게 조작할 수 도 있습니다.
git reset <옵션> <돌아가고싶은 커밋id>
ex)
git reset --soft abcdef
git reset --mixed abcdef (옵션 작성안할 시 기본값)
git reset --hard abcdef
git reset HEAD~10 (현재부터 10개 이전으로 복원)
–soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
–mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
–hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
출처: https://gmlwjd9405.github.io/2018/05/25/git-add-cancle.html
hard는 가장 깔끔하지만 해당 커밋 이후의 작업들이 모두 사라지므로 확실할때만 신중히 사용해야겠습니다.
mixed의 경우 soft와 달리 워킹 디렉토리는 유지되지만 index가 취소되므로 취소된 파일들을 다시 add 해줘야합니다.
[Revert]
그에 반해 revert는 앞서 말한 것 처럼 특정 사건을 골라서 없던일로 만듭니다. 또한 앞서 말한 것처럼 과거 특정 사건을 없에주지만 revert를 했다는 이력이 남게 됩니다.
그리고 없엘려는 특정 사건의 과거와 미래와 얽혀 충돌이 나는 경우가 많습니다.
깃 명령어는 다음과 같습니다.
git revert <돌아가고싶은 커밋id>
[P.S]
revert는 이력을 남겨주므로 뭘 고쳤는지 알 수 있다는 점이 장점인 것 같습니다. (특히 협업에서 중요할 것 같습니다. reset 하면 자기밖에 모르니..) 그리고 reset으로는 remote repository에 이미 push된 커밋을 조작할 수 없으니 이떄는 revert 만 사용가능합니다.
아니면 reset을 하고 강제 푸쉬하는 방법도 있긴 합니다.
참고하고 매우 잘 설명된 만화입니다.
'Git' 카테고리의 다른 글
[Git] Git Commit Message Convention 정리 (0) | 2021.04.30 |
---|---|
[Git][기타] 깃허브 다크 테마(dark theme) 등 여러 플러그인 (0) | 2020.05.08 |
[Git] .gitignore 파일 설정 (불필요한 파일이 저장소에 병합되는 것을 막자) (3) | 2020.02.23 |
[Git] 중앙 원격저장소 사용할 때 정리 (ex 협업, 오픈소스 기여 등) (0) | 2020.02.19 |
[Git] Git WorkFlow 정리 잘 해놓은 글 (0) | 2019.11.08 |