브랜치 마지막 부분입니다. 이번 포스팅에서는 브랜치의 이동원리, 커밋 되돌리기 등 여러가지를 다루어보겠습니다.
기본적으로 HEAD는 현재 내가 있는 위치라고 생각하면 편합니다. HEAD는 수많은 브랜치와 커밋 중 위치하고 있는 곳이죠. git checkout은 이러한 HEAD를 제어해서 브랜치사이의 이동을 시키는 명령어입니다. 반대로 git reset은 HEAD가 가르키는 커밋을 원하는 브랜치의 원하는 커밋으로 바꿀 수 있게해주는 명령어이죠.

현재 레포지토리는 이러한 커밋과 브랜치를 형성하고 있습니다. main 브랜치는 message3 커밋에 있지만 develop, feature/login 브랜치는 로그인 작업 완료 커밋을 가르키고 있고, HEAD도 마찬가지죠. 간단한 상황을 통해 git reset에 대해서 알아보겠습니다.

현재는 develop 브랜치입니다. 이 상태에서 새로운 커밋을 하나 생성하겠습니다. 메시지는 평범하게 commit이라고 하겠습니다. 물론 파일의 내용을 변경해야 커밋을 생성할 수 있어요.

이제 커밋상태를 확인해보죠.

이제 간단하게 3개의 브랜치가 모두 다른 커밋 상태를 가지고 있고, 현재는 develop 브랜치에 있죠? 여기서 develop브랜치의 커밋내용을 제거하고 다시 원래 상태로 돌려보겠습니다. git reset [커밋 해시값]을 입력하면 되는데 가고자하는 커밋의 해시값을 입력해야 해요.

이렇게 되면 에러없이 잘 수행된겁니다. 기록도 한번 보시죠.

다시 원래 커밋상태로 잘 돌아왔죠? 이 명령어를 통해서 HEAD가 가르키는 브랜치의 기존의 커밋의 연결을 끊고 해시값의 커밋으로 브랜치의 커밋으로 연결한겁니다. 원하는 브랜치의 어떤 커밋이든 이동할 수 있어요.
아마 이 부분이 굉장히 유용한 부분이라고 생각해요. 코드를 작성하다보면, 현재 작성하던 파일 중간에 다른 파일을 수정해서 커밋해야되는 상황이옵니다. 그러면 현재 작성하던 파일을 무시하고 다른 파일을 커밋해야되는데, 이런 경우 git stash를 사용할 수 있어요.
새로운 브랜치를 만들어줄게요. feature/homeui 브랜치입니다.

이 상태에서 test.txt파일안에 "홈 UI 작업 중"이라고 적고 저장만할게요. 스테이징과 커밋은 안합니다.

커밋을 하지 않았으니 파일의 상태는 modified입니다. 이제 이 수정된 파일을 감추어볼게요. git stash라고 입력하면 현재 수정중인 파일들을 모두 감출 수 있습니다.

워킹트리가 깔끔하다고 나타나죠? 마치 아무것도 수정하지 않은 것처럼 말이죠. 이제 다시 감춘파일을 꺼내보겠습니다. git stash pop 명령어를 사용하면 감춘파일들을 꺼낼 수 있어요.

이제 커밋하지 않은 파일들을 감추거나 꺼낼 수 있습니다.
글 잘 봤습니다.