본문 바로가기
👨‍💻 프로그래밍/⚙️ DevOps

git reset 제대로 알고쓰기

by 개발자 진개미 2023. 6. 30.
반응형

git reset의 용도

보통 Git을 사용하면 아래 사진과 같이 바꾼 내용을 모두 기록하게 됩니다.

이때, 만약 특정 기능이 문제를 일으켜 되돌려야 할 때는 보통 revert를 사용합니다. 특정 commit을 revert 하면 그 commit의 변화를 모두 없애 주는 새로운 commit을 만들 수 있습니다.

이렇게 하면 과거의 commit history를 바꾸지 않기 때문에 여러 명이서 협업을 할 때도 문제없이 진행할 수 있습니다.

반면 git reset은 과거의 commit history를 바꾸는 용도입니다. 그렇게 때문에 특히 여러명이 협업할 때는 함부로 쓰면 안 되고, 올라가면 안 되는 민감한 정보가 올라갔다던지 하는 commit history를 꼭 바꿔야 하는 이유가 있는 경우에만 사용해야 합니다. (저는 회사에서 1번도 쓴 적이 없습니다.)


알아야 할 개념: working directory, staging area

Git에서 수정을 하면 크게 4가지 단계를 거칩니다.

  1. 내 컴퓨터에서 원하는 내용을 수정
  2. 이것을 git add 를 사용해서 추가
  3. git commit을 해서 commit을 만들고
  4. 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를 따서 쓰는 것을 추천드립니다.


반응형