git reset의 용도
보통 Git을 사용하면 아래 사진과 같이 바꾼 내용을 모두 기록하게 됩니다.
이때, 만약 특정 기능이 문제를 일으켜 되돌려야 할 때는 보통 revert를 사용합니다. 특정 commit을 revert 하면 그 commit의 변화를 모두 없애 주는 새로운 commit을 만들 수 있습니다.
이렇게 하면 과거의 commit history를 바꾸지 않기 때문에 여러 명이서 협업을 할 때도 문제없이 진행할 수 있습니다.
반면 git reset은 과거의 commit history를 바꾸는 용도입니다. 그렇게 때문에 특히 여러명이 협업할 때는 함부로 쓰면 안 되고, 올라가면 안 되는 민감한 정보가 올라갔다던지 하는 commit history를 꼭 바꿔야 하는 이유가 있는 경우에만 사용해야 합니다. (저는 회사에서 1번도 쓴 적이 없습니다.)
알아야 할 개념: working directory, staging area
Git에서 수정을 하면 크게 4가지 단계를 거칩니다.
- 내 컴퓨터에서 원하는 내용을 수정
- 이것을 git add 를 사용해서 추가
- git commit을 해서 commit을 만들고
- git push 로 Github 같은 곳에 추가
여기서 1번의 내 컴퓨터에서 수정한 것을 Working Directory, 2에서 git add를 실행하면 추가되는 곳을 Staging Area라고 합니다.
git reset 옵션: --soft, --mixed, --hard
Working Directory | Staging Area | |
--soft | ✅ 냅둠 | ✅ 냅둠 |
--mixed | ✅ 냅둠 | ❌ 비움 |
--hard | ❌ 비움 | ❌ 비움 |
우선 기본 값은 --mixed입니다. 즉, 생각 없이 git reset을 수행하면 Staging Area는 일단 날아갑니다. 하지만 현대에서는 Git을 GUI로 쓰는 경우가 많아 보통 Staging Area를 따로 관리하지 않기 때문에 큰 문제는 없습니다. 만약 Staging Area를 따로 관리하신다면 --soft를 사용해야 합니다.
문제는 --hard입니다. 이걸 사용하면 commit하지 않은 내가 작업하고 있는 내용이 모두 날아갑니다!! --hard는 절대 함부로 쓰면 안 됩니다. 저는 revert를 모르고 git reset을 썼을 때 실수로 --hard를 써서 소중한 작업 내용을 날려버린 경험이 있습니다. 애초에 git reset 자체를 쓰지 않는 게 좋지만 만약 쓴다고 해도 --hard를 쓸 때는 새로운 branch를 따서 쓰는 것을 추천드립니다.
'👨💻 프로그래밍 > ⚙️ DevOps' 카테고리의 다른 글
ES, Kibana, Grafana, Prometheus, Thanos, Logstash 사이의 관계 이해하기 (0) | 2024.02.27 |
---|---|
Logback 간단하게 알아보기 (0) | 2023.10.01 |
Git 파일의 Life Cycle 이해하기 (0) | 2023.06.29 |
Bash Commands 이상형 월드컵 Top 10 (0) | 2023.06.21 |
쿠버네티스가 뭘까? 작동원리, 아키텍처 정리! (0) | 2023.04.02 |