아카이브

[Git] git reset - 이전 commit으로 돌아가기 본문

Git

[Git] git reset - 이전 commit으로 돌아가기

Rayi 2024. 12. 24. 09:49

Head는 현재 작업 중인 브랜치를 가리킵니다.

 

그리고 브랜치는 일반적으로 최근에 생성한 commit을 가리킵니다.

 

하지만 이 브랜치가 가리키는 commit 위치를 이전 commit 중 하나로 바꿀 수도 있으며,

 

그 때 마다 현재 작업중인 workspace의 내용 또한 그 commit에 해당하는 내용으로 바뀝니다.

 

이를 바꾸려면 git reset 명령어를 사용하면 됩니다.

soft/mixed/hard

git reset을 사용하면 저장소는 우리가 지정한 commit id에 해당하는 commit 상태로 돌아가게 됩니다.

 

여기서 세 가지 옵션을 통해 저장소 외에도 staging area, workspace의 상태도 결정할 수 있습니다.

soft

저장소만 이전 commit으로 돌아가고, staging area와 workspace의 파일은 현재 상태 그대로 둡니다.

git reset --soft [commit id]

mixed

저장소staging area의 파일이 이전 commit으로 돌아가고, workspace의 파일은 현재 상태 그대로 둡니다.

git reset --mixed [commit id]

hard

저장소staging area, workspace 모두 이전 commit으로 돌아갑니다.

git reset --hard [commit id]

현재 commit을 기준으로 reset하기

Commit id를 일일이 확인하기 번거로울 때는, head를 기준으로 몇 번째 commit을 지정할 수 도 있습니다.

// 바로 이전의 commit을 가리킵니다.
git reset --hard HEAD^

// n번째 이전의 commit을 가리킵니다.
git reset --hard HEAD~n

 

+) reset은 이전의 commit 뿐 아니라 이후의 commit으로도 이동할 수 있습니다.

Reset 후 다시 앞 commit으로 돌아가기 

git reset을 통해 이전 commit으로 돌아가도, 그 뒤의 commit들은 지워지지 않고 여전히 남아 있습니다.

 

때문에 commit id만 알고 있다면 언제든지 이전의 commit으로 reset할 수 있습니다.

 

만약 돌아가고자 하는 commit의 id를 모른다면, git reflog를 이용해 이때까지 head가 가리켰던 commit들을 확인하여 알아낼 수 있습니다.

git reflog

여기서 HEAD@{ }가 가리키는 숫자가 작을 수록 최근에 head가 방문한 commit을 가리킵니다.

여기서 commit id 대신 HEAD@{n}을 대신 사용할 수도 있습니다.

git reset --hard HEAD@{1}
728x90
Comments