책 읽다가 코딩하다 죽을래

[Git] 과거의 커밋으로 돌아가는 reset 알아보기(GUI ver) 본문

코딩/Git,GitHub

[Git] 과거의 커밋으로 돌아가는 reset 알아보기(GUI ver)

ABlue 2021. 6. 23. 14:25

 

 

과거에 들어갔던 페이지로 다시 돌아갈려면

뒤로가기 버튼을 누르면 되듯이

git에도 과거에 커밋(commit)했던 이력(history)으로 다시 돌아갈려면

git의 reset 기능을 이용하면 된다.

 

이 글은 복권에 당첨되고 싶은 ablue의 이야기를 통해 reset을 자세하게 알려줄 예정이다.

reset은 git을 다룰 때 꼭 알아야 하는 기능이지만

조심히 다루지 않으면 원치 않게 이력들을 잃어버릴 수 있으니 시간을 들여 공부할 필요가 있다.

 

사용 git GUI : SourceTree

IDE : 메모장

(VSCode나 인텔리제이를 써도 무관한다).

 

 

먼저 로컬저장소에 git을 하나 만든다.

그리고 이 폴더 안에 메모장 파일을 하나 만들어 다음과 같이 저장한다.

 

그 다음 SourceTree 를 실행해 git 로컬저장소을 찾아서 추가한다.

 

 

그러면 스테이지에 올라가지 않은 파일에 ablue의 일기.TXT 파일이 있을텐데

1. 모두 스테이지에 올리기를 누른 후

2. "6월 17일 17시 복권방에 갔다" 라는 커밋 메세지작성 후

3. 커밋버튼을 눌러 커밋한다.

그 다음 history를 눌러 커밋이 잘 되는지 확인한다.

 

이제 우리는 커밋을 2개 더 만든 후 reset 실습을 할 것이다.

 

다시 ablue의 일기.TXT에 들어가서 다음과 같이 내용을 수정하자.

전재산이 5000원이 전부인 ablue는 모든것을 걸어 마지막 영혼의 한타를 하고자 한다.

 

수정한 뒤에 저장하고 SourceTree에 가서 커밋을 한다.

커밋 메세지는 "6월 17일 19시 복권을 샀다"이다

 

 

하지만 안타깝게도 겨우 하나를 맞춘 ablue였다...

일기장의 내용을 수정하고 저장한 뒤 커밋하자

커밋 메세지는 "6월 19일 12시 아쉽게도 꽝이다"이다.

전재산을 투자했는데도 실패한 ablue는 시간을 되돌리고 싶었다..

현실의 시간은 되돌리지 못하지만 git에서는 되돌릴 수 있다는 사실을 안 ablue는

기분만 내기 위해 reset기능을 사용할 것이다...!

 

자 history안에 들어가보자 무엇이 있는가

이렇게 3개의 ablue의 일기가 있다.

 

 

ablue는 무엇을 하고싶은가

ablue는 복권번호를 샀던 시점인 6월 17일 19시로 돌아가고 싶다.

6월19일 12시에 발표된 968회 당첨번호를 기억한 채 말이다

 

그럼 돌아가고 싶은 시점을 클릭한 뒤 오른쪽 마우스를 클릭하면

누가봐도 되게 직관적으로 표현된 "이 커밋까지 현재 브런치를 초기화" 버튼을 클릭하자.

그렇다. 이것이 reset기능이다.

그럼 이렇게 커밋 초기화 창이 나타나고

reset 모드를 선택할 수 있다.

reset 모드는 Hard, Mixed, Soft 이렇게 3가지가 나타나는데

각 모드의 설명문을 보면 잘 와닿지가 않는다.

그럼 직접 실습해보자 먼저 Mixed 모드를 선택한 후 확인 버튼을 누르자.

 

그럼 무슨 일이 일어나는가

3번째 커밋인 "6월 19일 12시 아쉽게도 꽝이다" 문구는 사라지고

커밋하지 않은 변경사항으로 나타난다.

 

그리고 스테이지에 올라가지 않은 파일이 생겼고 

 

ablued의 일기를 보니 그대로 있다.

설명하자면 reset Mixed 모드는 이력만 변하는 것이고 파일들은 변하지 않는다.

ablue는 시간을 되돌리고 시간을 되돌리기 전 기억(968회 당첨번호)을 갖고있는 상태이다.

즉 자신이 원하던 것이다!!

자 그럼 soft도 실습해보자

모두 스테이지에 올리기를 눌러 ablue의 일기를 스테이지에 올린 후 

커밋메세지는 아까처럼 "6월 19일 12시 아쉽게도 꽝이다" 로 해준 뒤 커밋을 한다.

 

그럼 다시 이렇게 나올텐데 요번엔 soft 모드를 고르고 초기화를 시켜보자

 

 

그럼 결과가 어떠한가

사실 soft는 Mixed와 거의 흡사한데 단지 차이점은 이력을 되돌린 뒤 그 시간동안 수정했던 파일들이 스테이지에 이미 올라가있다.

아까 Mixed모드를 선택했을때는 스테이지에 올라가있지 않았다. 단지 그 차이이다.

 

 

 

왼쪽은 soft모드의 결과 오른쪽은 Mixed모드의 결과이다.

자 그럼 Hard도 실습해보자

모두 스테이지에 올리기를 눌러 ablue의 일기를 스테이지에 올린 후 

커밋메세지는 아까처럼 "6월 19일 12시 아쉽게도 꽝이다" 로 해준 뒤 커밋을 한다.

 

 

Hard모드를 선택 후 확인 버튼을 누른다

 

그럼 이렇게 무서운 경고가 나오는데 해석해보면

커밋하지 않은 변경사항을 날릴 수 있다는 뜻입니다.

Hard 모드는 초기화 당시 커밋하지 않은 변경사항들이 있으면

사라지게 되니 이 점을 유의해야합니다.

 

우리는 의도적으로 하는 것이니 '예' 버튼을 눌러줍시다

그럼 무엇이 달라졌는지 확인해볼까요?

 

 

세번째 커밋 "6월 19일 12시 아쉽게도 꽝이다" 는 사라지고 파일 상태는 딱히 달라진 것이 없다로 인식되고 있습니다.

 

 

 

ablue의 일기를 들어와보니 6월 19일 12시의 내용이 사라져있습니다.

그렇습니다. Hard 모드는 이력도 변경하며 현재에서 돌아온 시간에 수정된 파일도 모두 돌아온 시점으로 변경됩니다.

ablue는 시간을 되돌리고 시간을 되돌리기 전 기억(968회 당첨번호)도 잃어버린 상태이다. 이번 생엔 복권당첨은 물건너 간 것이다..

 

 

정리해보자면

 

reset Soft는 과거로 돌아가 이력이 삭제되지만 파일들은 그대로 있으며 스테이징되어있다.

reset Mixed는 과거로 돌아가 이력이 삭제되지만 파일들은 그대로 있으며 스테이징 되어있지않다.

reset Hard는 과거로 돌아가고 파일들도 과거시점의 그 상태로 돌아가게 된다. 말 그대로 과거 그 시점으로 완전히 돌아가는 것이니 스테이징된 파일들이 없다.(스테이징 되어있지 않은 것과 다른 뜻이라는 걸 유의)