커밋 이동

Violet_Evgadn·2023년 9월 2일
0

Git

목록 보기
5/33

다른 커밋으로 이동하기

1. README 파일 내용 수정

현재 로컬 저장소의 README 파일에는 추가 과정을 거치지 않았다면 "Git 테스트를 위한 발걸음"이라는 문구가 저장되어 있을 것이다.

이 문구를 "Git Test Start!"로 바꿔본 후 다시 커밋 시켜보자.

이후 git log를 입력하면 (커밋 메시지는 다르더라도) 아래와 같이 나올 것이다.

이젠 README 파일에 저장된 문구를 다시 "Git 테스트를 위한 발걸음"으로 바꿔보자.
(즉, 이전 버전으로 원복 시켜보자)

2. 과거 버전의 README로 원복하기

git checkout [커밋 ID]

우리는 최초 커밋 시의 README 파일로 되돌리고 싶은 것이므로 git checkout c4a464b5719d273ae8b1eed849cffe289991235a 를 입력하면 될 것이다.

이후 README 파일을 확인해 보자.

정상적으로 원복 되었다!

3. 최신 커밋의 README로 되돌리기

물론 git checkout c4a464b5719d273ae8b1eed849cffe289991235a로 커밋 ID를 통해 되돌릴 수도 있지만, 최신 커밋으로 되돌릴 경우 커밋 ID 대신 간단히 '-'만 입력해도 된다.
즉, git checkout -를 입력해도 최신 커밋의 README로 되돌릴 수 있다.

최신 커밋의 README로 되돌려졌음을 확인할 수 있다.

checkout

Git에서는 checkout 명령을 통해 원하는 시점(커밋)으로 파일을 되돌릴 수 있다.
이를 "체크아웃 한다"라고도 부른다.

git checkout 명령을 사용할 때 커밋 ID를 사용하는데, 이때 위 실습처럼 모든 커밋 ID를 사용하지 않아도 앞 7자릿값만 존재한다면 정상적으로 checkout이 가능하다.

즉, git checkout c4a464b5719d273ae8b1eed849cffe289991235a에서 앞 7자리만 가지고 와 git checkout c4a464b로 입력해도 동일한 동작을 한다는 것이다.

checkout 명령은 Git에서 오래전부터 애용되오던 명령어이다 보니 명령 1개에 너무 많은 기능이 포함되어 있다.

위 예시처럼 다른 커밋으로 갈 때도 git commit을 사용할 수 있지만 새로운 (로컬) 브랜치로 이동하기, 특정 파일을 복구하는 용도로도 사용될 수 있다.

# checkout을 통한 특정 파일 복구 방법
git checkout <커밋 ID> <특정 파일 경로>

또한 checkout을 통해 원격 브랜치에 체크아웃하면 원격 브랜치의 내용을 로컬 환경에 가져오는 역할도 할 수 있다.

이렇게 많은 기능을 가지고 있다 보니 Git은 checkout 명령어를 switch라는 브랜치 이동 명령어와 restore라는 파일 복구 명령어로 나누었다.

하지만 checkout에만 존재하는 기능도 몇 가지 존재하기 때문에, git checkout을 아예 잊어버리면 안 되겠다.

(예를 들어, git checkout에서는 커밋 아이디를 통해 특정 커밋을 지정해서 돌아갈 수 있지만 git switch에는 해당 방법이 존재하지 않는다. 이는 커밋 ID를 지정하여 특정 커밋으로 되돌아가는 것이 매우 위험한 명령이기 때문이다.)


커밋 체크섬

위에서 git checkout으로 특정 커밋으로 이동할 때 c4a464b5719d273ae8b1eed849cffe289991235a와 같이 숫자와 문자로 이루어진 암호문 같은 값이 존재했다.

이 값은 커밋 체크섬으로 커밋 ID라고 부른다.
커밋 ID는 생성되는 모든 커밋마다 고유하게 존재하며, 전 세계에서 유일한 값을 가진다.

커밋 ID는 소문자 + 숫자 조합의 40자로 SHA1 Hash Checksum 값으로 구성된다.
여기서 SHA1 해시 체크섬이란 SHA1 암호 알고리즘을 활용해 만들어낸 체크섬이라는 의미이다.

  • 체크섬 : 데이터의 정확성을 확인하기 위해 계산한 값

이러한 커밋 ID는 모든 커밋이 가지고 있는 전 세계에서 유일한 40자릿값이지만 커밋에 대한 작업을 수행할 때마다 40자리를 모두 입력하는 것은 힘들다.
따라서 Git은 앞 7자리만 화면에 보여주고 앞 7자리만 입력해도 정상적으로 CLI에서 커밋 처리를 수행할 수 있게 만들어졌다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글