티스토리 뷰

Git

reset과 옵션들(--hard,--mixed,--soft)

심재철 2019. 4. 30. 16:50

깃에는 3가지 영역이 있다. 우선 내가 작업하고 있는 working directory, 커밋할 파일들을 추리는 과정에서 staging area(add로 추가된 파일들), 그리고 실제 커밋된 파일들이 저장되는 local repository 이렇게 3가지 영역이 있다.

 

reset이라는 Git 명령어는 현재 HEAD가 가리키고 있는 Branch가 가리키는 버전을 과거 또는 지워진 미래로 다시 이동 시킬 수 있다.(이해 안되면 그냥 과거로 초기화 한다고 보면 됨)

 

근데 이때 과거로 돌아가면서 삭제되는 폴더를 --hard, --mixed, --soft 3가지 옵션으로 조정 할 수 있는 것이다.

 

예를 들어, 1 2 3 번 커밋이 있고 현재 head가 3번 커밋을 가리키고 있다고 해보자. 이떄 2번으로 reset하고 싶다.

그럴때 reset --hard 2 라는 명령어를 주게 되면 작업디렉토리, 스테이징, 레파지토리 3가지 영역 모두 2번으로 돌아게 된다.

 

하지만, reset --mixed 2 라는 명령어를 주게 되면 작업디렉토리는 현재 내가 작업한 상태그대로 머물러 있지만 스테이징과 레파지토리의 상태가 2번으로 돌아가게 된다. 즉, 내가 3번을 잘못 커밋했을때 과거로 돌아간다음 다시 커밋하고 싶을때 사용 할 수있는 방법이다.(옵션을 지정하지 않으면 디폴트 값으로 --mixed가 설정된다. 자주 사용되는 옵션이라 그런듯)

 

3번 커밋이 잘못 됬다는 것을 깨닫고 수정을 하고 싶을때 reset --mixed 2로 레파지토리와 스테이징의 내용을 2번으로 되돌린다. 그런 다음, 현재 내가 수정하던 파일의 잘못된 부분을 한번더 수정하고 다시 커밋을 하게 되면 새로운 3번 커밋이 생성될것이고, 그 3번은 제대로 수정된 버전일 것이다.

 

마지막으로 --soft 옵션은 레파지토리만 과거로 돌아가게 만든다. 즉, 스테이징과 작업디렉토리는 그대로 냅둔다는것인데, 아직 이 옵션은 사용해보지 않아서 정확히 mixed와 어떤 차이로 어떤 상황에 사용되는지 잘 모르겠다.. 나중에 알게되면 업데이트 하도록 하겠다. 일단 뭔지만 알아놓자.

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함